Hello,
this week we started with upgrading project to Spring Boot 3, Hibernate 6.
Project now works expect Liquibase Gradle migrations and we are trying to figure out.
Our configuration:
org.springframework.boot:3.0.2
org.postgresql:postgresql:42.5.1
org.liquibase:liquibase-core:4.19.0
org.liquibase:liquibase-core:4.19.0
org.liquibase.ext:liquibase-hibernate6:4.19.0
For development we are using Postgres 14 and our Liquibase configuration for migrations is:
liquibase {
activities.register("main") {
this.arguments = mapOf(
"url" to "jdbc:postgresql://localhost/database-name",
"username" to "database-username",
"password" to "database-password",
"driver" to "org.postgresql.Driver",
"classpath" to "src/main",
"changeLogFile" to "src/main/resources/db/main.xml"
)
}
runList = "main"
}
After we try to run ./gradlew diffChangeLog there is error :
[liquibase.integration] [PersistenceUnit: default] Unable to build Hibernate SessionFactory
and then continues with Suppressed: java.lang.UnsupportedOperationException: CteMutationStrategy can only be used with Dialects that support CTE that can take UPDATE or DELETE statements as well.
After project upgrade we experienced same issue with Spring app and was resolved because there was historically spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults=false. After setting this attribute to true (or remove) Spring app starts works. We tried same solution with Liquibase Gradle plugin (adding hibernate.temp.use_jdbc_metadata_defaults=true into referenceUrl but without any change).
Do you have any idea what should be point of this failure? Thanks!
Bigger part of stack trace:
[2023-01-22 20:53:38] SEVERE [liquibase.integration] [PersistenceUnit: default] Unable to build Hibernate SessionFactory
- Caused by: PostInitCallback queue could not be processed...
- PostInitCallbackEntry - Entity(com.example.services.domain.organizer.discounts.EventDiscount) `sqmMultiTableMutationStrategy` interpretation
- PostInitCallbackEntry - Entity(com.example.services.domain.organizer.discounts.EventDiscount) `sqmMultiTableInsertStrategy` interpretation
- PostInitCallbackEntry - Entity(com.example.services.domain.services.auth.AuthAuthority) `sqmMultiTableMutationStrategy` interpretation
- PostInitCallbackEntry - Entity(com.example.services.domain.services.auth.AuthAuthority) `sqmMultiTableInsertStrategy` interpretation
- PostInitCallbackEntry - Entity(com.example.services.domain.services.auth.variants.ServiceAuthAuthority) `sqmMultiTableMutationStrategy` interpretation
- PostInitCallbackEntry - Entity(com.example.services.domain.services.auth.variants.ServiceAuthAuthority) `sqmMultiTableInsertStrategy` interpretation
- PostInitCallbackEntry - Entity(com.example.services.domain.payment.transactions.TransactionBase) `sqmMultiTableMutationStrategy` interpretation
- PostInitCallbackEntry - Entity(com.example.services.domain.payment.transactions.TransactionBase) `sqmMultiTableInsertStrategy` interpretation
- PostInitCallbackEntry - Entity(com.example.services.domain.tt.TicketProduct) `sqmMultiTableMutationStrategy` interpretation
- PostInitCallbackEntry - Entity(com.example.services.domain.tt.TicketProduct) `sqmMultiTableInsertStrategy` interpretation
- PostInitCallbackEntry - Entity(com.example.services.domain.tt.tt.tdb.Example) `sqmMultiTableMutationStrategy` interpretation
- PostInitCallbackEntry - Entity(com.example.services.domain.tt.tt.tdb.Example) `sqmMultiTableInsertStrategy` interpretation
liquibase.exception.CommandExecutionException: liquibase.exception.DatabaseException: jakarta.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory
at liquibase.command.CommandScope.execute(CommandScope.java:186)
at liquibase.integration.commandline.CommandRunner.call(CommandRunner.java:55)
at liquibase.integration.commandline.CommandRunner.call(CommandRunner.java:24)
at picocli.CommandLine.executeUserObject(CommandLine.java:1953)
at picocli.CommandLine.access$1300(CommandLine.java:145)
at picocli.CommandLine$RunLast.executeUserObjectOfLastSubcommandWithSameParent(CommandLine.java:2352)
at picocli.CommandLine$RunLast.handle(CommandLine.java:2346)
at picocli.CommandLine$RunLast.handle(CommandLine.java:2311)
at picocli.CommandLine$AbstractParseResultHandler.execute(CommandLine.java:2179)
at picocli.CommandLine.execute(CommandLine.java:2078)
at liquibase.integration.commandline.LiquibaseCommandLine.lambda$execute$1(LiquibaseCommandLine.java:352)
at liquibase.Scope.child(Scope.java:189)
at liquibase.Scope.child(Scope.java:165)
at liquibase.integration.commandline.LiquibaseCommandLine.execute(LiquibaseCommandLine.java:317)
at liquibase.integration.commandline.LiquibaseCommandLine.main(LiquibaseCommandLine.java:84)
Caused by: liquibase.exception.DatabaseException: jakarta.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory
at liquibase.integration.commandline.CommandLineUtils.createDatabaseObject(CommandLineUtils.java:140)
at liquibase.integration.commandline.Main.createReferenceDatabaseFromCommandParams(Main.java:2156)
at liquibase.integration.commandline.Main.doMigration(Main.java:1566)
at liquibase.integration.commandline.Main$1.lambda$run$0(Main.java:396)
at liquibase.Scope.lambda$child$0(Scope.java:180)
at liquibase.Scope.child(Scope.java:189)
at liquibase.Scope.child(Scope.java:179)
at liquibase.Scope.child(Scope.java:158)
at liquibase.integration.commandline.Main$1.run(Main.java:395)
at liquibase.integration.commandline.Main$1.run(Main.java:217)
at liquibase.Scope.child(Scope.java:189)
at liquibase.Scope.child(Scope.java:165)
at liquibase.integration.commandline.Main.run(Main.java:217)
at liquibase.command.AbstractCliWrapperCommandStep.run(AbstractCliWrapperCommandStep.java:32)
at liquibase.command.CommandScope.execute(CommandScope.java:172)
... 14 more
Caused by: jakarta.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.persistenceException(EntityManagerFactoryBuilderImpl.java:1509)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1430)
at liquibase.ext.hibernate.database.HibernateEjb3Database.buildMetadataFromPath(HibernateEjb3Database.java:56)
at liquibase.ext.hibernate.database.HibernateDatabase.buildMetadata(HibernateDatabase.java:133)
at liquibase.ext.hibernate.database.HibernateDatabase.setConnection(HibernateDatabase.java:73)
at liquibase.database.DatabaseFactory.findCorrectDatabaseImplementation(DatabaseFactory.java:124)
at liquibase.database.DatabaseFactory.openDatabase(DatabaseFactory.java:144)
at liquibase.integration.commandline.CommandLineUtils.createDatabaseObject(CommandLineUtils.java:94)
... 28 more
Caused by: java.lang.IllegalStateException: PostInitCallback queue could not be processed...
- PostInitCallbackEntry - Entity(com.example.services.domain.organizer.discounts.EventDiscount) `sqmMultiTableMutationStrategy` interpretation
- PostInitCallbackEntry - Entity(com.example.services.domain.organizer.discounts.EventDiscount) `sqmMultiTableInsertStrategy` interpretation
- PostInitCallbackEntry - Entity(com.example.services.domain.services.auth.AuthAuthority) `sqmMultiTableMutationStrategy` interpretation
- PostInitCallbackEntry - Entity(com.example.services.domain.services.auth.AuthAuthority) `sqmMultiTableInsertStrategy` interpretation
at org.hibernate.metamodel.mapping.internal.MappingModelCreationProcess.executePostInitCallbacks(MappingModelCreationProcess.java:146)
at org.hibernate.metamodel.mapping.internal.MappingModelCreationProcess.execute(MappingModelCreationProcess.java:90)
at org.hibernate.metamodel.mapping.internal.MappingModelCreationProcess.process(MappingModelCreationProcess.java:39)
at org.hibernate.metamodel.model.domain.internal.MappingMetamodelImpl.finishInitialization(MappingMetamodelImpl.java:229)
at org.hibernate.metamodel.internal.RuntimeMetamodelsImpl.finishInitialization(RuntimeMetamodelsImpl.java:60)
at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:311)
at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:415)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1425)
... 34 more
Suppressed: java.lang.UnsupportedOperationException: CteMutationStrategy can only be used with Dialects that support CTE that can take UPDATE or DELETE statements as well
at org.hibernate.query.sqm.mutation.internal.cte.CteMutationStrategy.<init>(CteMutationStrategy.java:80)
at org.hibernate.query.sqm.mutation.internal.cte.CteMutationStrategy.<init>(CteMutationStrategy.java:64)
at org.hibernate.dialect.PostgreSQLDialect.getFallbackSqmMutationStrategy(PostgreSQLDialect.java:821)
at org.hibernate.query.sqm.mutation.internal.SqmMutationStrategyHelper.resolveStrategy(SqmMutationStrategyHelper.java:62)
at org.hibernate.persister.entity.AbstractEntityPersister.interpretSqmMultiTableStrategy(AbstractEntityPersister.java:5957)
at org.hibernate.persister.entity.AbstractEntityPersister.lambda$prepareMappingModel$11(AbstractEntityPersister.java:5792)
at org.hibernate.metamodel.mapping.internal.MappingModelCreationProcess$PostInitCallbackEntry.process(MappingModelCreationProcess.java:210)
at org.hibernate.metamodel.mapping.internal.MappingModelCreationProcess.executePostInitCallbacks(MappingModelCreationProcess.java:108)
... 41 more
Suppressed: java.lang.UnsupportedOperationException: CteInsertStrategy can only be used with Dialects that support CTE that can take UPDATE or DELETE statements as well
at org.hibernate.query.sqm.mutation.internal.cte.CteInsertStrategy.<init>(CteInsertStrategy.java:123)
at org.hibernate.query.sqm.mutation.internal.cte.CteInsertStrategy.<init>(CteInsertStrategy.java:107)
at org.hibernate.dialect.PostgreSQLDialect.getFallbackSqmInsertStrategy(PostgreSQLDialect.java:828)
at org.hibernate.query.sqm.mutation.internal.SqmMutationStrategyHelper.resolveInsertStrategy(SqmMutationStrategyHelper.java:87)
at org.hibernate.persister.entity.AbstractEntityPersister.interpretSqmMultiTableInsertStrategy(AbstractEntityPersister.java:5972)
at org.hibernate.persister.entity.AbstractEntityPersister.lambda$prepareMappingModel$12(AbstractEntityPersister.java:5825)
at org.hibernate.metamodel.mapping.internal.MappingModelCreationProcess$PostInitCallbackEntry.process(MappingModelCreationProcess.java:210)
at org.hibernate.metamodel.mapping.internal.MappingModelCreationProcess.executePostInitCallbacks(MappingModelCreationProcess.java:108)
... 41 more
Suppressed: java.lang.UnsupportedOperationException: CteMutationStrategy can only be used with Dialects that support CTE that can take UPDATE or DELETE statements as well
at org.hibernate.query.sqm.mutation.internal.cte.CteMutationStrategy.<init>(CteMutationStrategy.java:80)
at org.hibernate.query.sqm.mutation.internal.cte.CteMutationStrategy.<init>(CteMutationStrategy.java:64)
at org.hibernate.dialect.PostgreSQLDialect.getFallbackSqmMutationStrategy(PostgreSQLDialect.java:821)
at org.hibernate.query.sqm.mutation.internal.SqmMutationStrategyHelper.resolveStrategy(SqmMutationStrategyHelper.java:62)
at org.hibernate.persister.entity.AbstractEntityPersister.interpretSqmMultiTableStrategy(AbstractEntityPersister.java:5957)
at org.hibernate.persister.entity.AbstractEntityPersister.lambda$prepareMappingModel$11(AbstractEntityPersister.java:5792)
at org.hibernate.metamodel.mapping.internal.MappingModelCreationProcess$PostInitCallbackEntry.process(MappingModelCreationProcess.java:210)
at org.hibernate.metamodel.mapping.internal.MappingModelCreationProcess.executePostInitCallbacks(MappingModelCreationProcess.java:108)
... 41 more
Hello, this week we started with upgrading project to Spring Boot 3, Hibernate 6. Project now works expect Liquibase Gradle migrations and we are trying to figure out.
Our configuration:
org.springframework.boot:3.0.2
org.postgresql:postgresql:42.5.1
org.liquibase:liquibase-core:4.19.0
org.liquibase:liquibase-core:4.19.0
org.liquibase.ext:liquibase-hibernate6:4.19.0
For development we are using Postgres 14 and our Liquibase configuration for migrations is:
After we try to run
./gradlew diffChangeLog
there is error :[liquibase.integration] [PersistenceUnit: default] Unable to build Hibernate SessionFactory
and then continues with
Suppressed: java.lang.UnsupportedOperationException: CteMutationStrategy can only be used with Dialects that support CTE that can take UPDATE or DELETE statements as well
.After project upgrade we experienced same issue with Spring app and was resolved because there was historically
spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults=false
. After setting this attribute to true (or remove) Spring app starts works. We tried same solution with Liquibase Gradle plugin (addinghibernate.temp.use_jdbc_metadata_defaults=true
intoreferenceUrl
but without any change).Do you have any idea what should be point of this failure? Thanks!
Bigger part of stack trace: