liquibase-hibernate
liquibase-hibernate copied to clipboard
Liquibase hibernate5 not generating diff file in classic mode
I'm trying to generate a diff file from my jpa annotaed entities and my database. I'm using the classic mode. Here' s my liquibase properties :
changeLogFile=src/main/resources/liquibase/liquibase-changeLog.xml
url=jdbc:oracle:thin:@//oralit-scan.infra.vs.ch:1521/OTBSVC_D
username=XXXXXX
password=XXXXXXXXXXXXXXX
driver=oracle.jdbc.driver.OracleDriver
referenceUrl=hibernate:classic:liquibase/hibernate.cfg.xml
diffChangeLogFile=src/main/resources/liquibase/liquibase-diff-changeLog.xml
My hibernate.cfg.xml :
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory >
<property name="javax.persistence.jdbc.driver">oracle.jdbc.driver.OracleDriver</property>
<property name="javax.persistence.jdbc.url">jdbc:oracle:thin:@//oralit-scan.infra.vs.ch:1521/OTBSVC_D</property>
<property name="javax.persistence.jdbc.user">XXXXXX</property>
<property name="javax.persistence.jdbc.password">XXXXXXX</property>
<property name="hibernate.dialect">org.hibernate.dialect.Oracle12cDialect</property>
</session-factory>
</hibernate-configuration>
and, finally, my pom.xml looks like that :
<plugin>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-maven-plugin</artifactId>
<version>3.5.3</version>
<configuration>
<propertyFile>src/main/resources/liquibase/liquibase.properties</propertyFile>
</configuration>
<dependencies>
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc7</artifactId>
<version>12.1.0.2</version>
</dependency>
<dependency>
<groupId>org.liquibase.ext</groupId>
<artifactId>liquibase-hibernate5</artifactId>
<version>3.6</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.3.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jpa</artifactId>
<version>1.7.3.RELEASE</version>
</dependency>
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>1.0.0.GA</version>
</dependency>
</dependencies>
</plugin>
Now, while running maven liquibase:diff, the result is a diff file containing only changeset with drop of existing tables and constraints, but no changeset for table creation.
Here's my maven execution stacktrace
INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building otbsvc 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- liquibase-maven-plugin:3.5.3:diff (default-cli) @ otbsvc ---
[INFO] ------------------------------------------------------------------------
[INFO] Parsing Liquibase Properties File
[INFO] File: src/main/resources/liquibase/liquibase.properties
[INFO] ------------------------------------------------------------------------
INFO 19.01.17 09:35: liquibase: Could not set check compatibility mode on OracleDatabase, assuming not running in any sort of compatibility mode: Cannot read from v$parameter: ORA-00942: Table ou vue inexistante
[INFO] Executing on Database: jdbc:oracle:thin:@//oralit-scan.infra.vs.ch:1521/OTBSVC_D
INFO 19.01.17 09:35: liquibase-hibernate: Reading hibernate configuration hibernate:classic:liquibase/hibernate.cfg.xml
janv. 19, 2017 9:35:25 AM org.hibernate.Version logVersion
INFO: HHH000412: Hibernate Core {5.0.10.Final}
janv. 19, 2017 9:35:25 AM org.hibernate.cfg.Environment <clinit>
INFO: HHH000206: hibernate.properties not found
janv. 19, 2017 9:35:25 AM org.hibernate.cfg.Environment buildBytecodeProvider
INFO: HHH000021: Bytecode provider name : javassist
janv. 19, 2017 9:35:26 AM org.hibernate.dialect.Dialect <init>
INFO: HHH000400: Using dialect: org.hibernate.dialect.Oracle12cDialect
INFO 19.01.17 09:35: liquibase-hibernate: Using dialect org.hibernate.dialect.Oracle12cDialect
janv. 19, 2017 9:35:26 AM org.hibernate.annotations.common.reflection.java.JavaReflectionManager <clinit>
INFO: HCANN000001: Hibernate Commons Annotations {5.0.1.Final}
janv. 19, 2017 9:35:26 AM org.hibernate.dialect.Dialect <init>
INFO: HHH000400: Using dialect: org.hibernate.dialect.Oracle12cDialect
janv. 19, 2017 9:35:26 AM org.hibernate.engine.jdbc.env.internal.LobCreatorBuilderImpl makeLobCreatorBuilder
INFO: HHH000422: Disabling contextual LOB creation as connection was null
janv. 19, 2017 9:35:26 AM org.hibernate.type.BasicTypeRegistry register
INFO: HHH000270: Type registration [byte[]] overrides previous : org.hibernate.type.BinaryType@17229821
janv. 19, 2017 9:35:26 AM org.hibernate.type.BasicTypeRegistry register
INFO: HHH000270: Type registration [[B] overrides previous : org.hibernate.type.BinaryType@17229821
janv. 19, 2017 9:35:26 AM org.hibernate.type.BasicTypeRegistry register
INFO: HHH000270: Type registration [Byte[]] overrides previous : org.hibernate.type.WrapperBinaryType@6cbe68e9
janv. 19, 2017 9:35:26 AM org.hibernate.type.BasicTypeRegistry register
INFO: HHH000270: Type registration [[Ljava.lang.Byte;] overrides previous : org.hibernate.type.WrapperBinaryType@6cbe68e9
janv. 19, 2017 9:35:26 AM org.hibernate.envers.boot.internal.EnversServiceImpl configure
INFO: Envers integration enabled? : true
janv. 19, 2017 9:35:26 AM org.hibernate.hql.spi.id.IdTableHelper executeIdTableCreationStatements
ERROR: Unable obtain JDBC Connection
java.sql.SQLException: No connection
at liquibase.ext.hibernate.database.HibernateDatabase$NoOpConnectionProvider.getConnection(HibernateDatabase.java:342)
at org.hibernate.internal.SessionFactoryImpl$2.obtainConnection(SessionFactoryImpl.java:653)
at org.hibernate.hql.spi.id.IdTableHelper.executeIdTableCreationStatements(IdTableHelper.java:67)
at org.hibernate.hql.spi.id.global.GlobalTemporaryTableBulkIdStrategy.finishPreparation(GlobalTemporaryTableBulkIdStrategy.java:125)
at org.hibernate.hql.spi.id.global.GlobalTemporaryTableBulkIdStrategy.finishPreparation(GlobalTemporaryTableBulkIdStrategy.java:42)
at org.hibernate.hql.spi.id.AbstractMultiTableBulkIdStrategyImpl.prepare(AbstractMultiTableBulkIdStrategyImpl.java:88)
at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:453)
at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:444)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:708)
at liquibase.ext.hibernate.database.HibernateClassicDatabase.configureSources(HibernateClassicDatabase.java:56)
at liquibase.ext.hibernate.database.HibernateDatabase.buildMetadataFromPath(HibernateDatabase.java:146)
at liquibase.ext.hibernate.database.HibernateClassicDatabase.buildMetadataFromPath(HibernateClassicDatabase.java:39)
at liquibase.ext.hibernate.database.HibernateDatabase.buildMetadata(HibernateDatabase.java:136)
at liquibase.ext.hibernate.database.HibernateDatabase.setConnection(HibernateDatabase.java:75)
at liquibase.database.DatabaseFactory.findCorrectDatabaseImplementation(DatabaseFactory.java:131)
at liquibase.database.DatabaseFactory.openDatabase(DatabaseFactory.java:151)
at liquibase.integration.commandline.CommandLineUtils.createDatabaseObject(CommandLineUtils.java:85)
at org.liquibase.maven.plugins.LiquibaseDatabaseDiff.performLiquibaseTask(LiquibaseDatabaseDiff.java:166)
at org.liquibase.maven.plugins.AbstractLiquibaseMojo.execute(AbstractLiquibaseMojo.java:394)
at org.liquibase.maven.plugins.LiquibaseDatabaseDiff.execute(LiquibaseDatabaseDiff.java:146)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80)
at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:307)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:193)
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:106)
at org.apache.maven.cli.MavenCli.execute(MavenCli.java:862)
at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:286)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:197)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
at org.codehaus.classworlds.Launcher.main(Launcher.java:47)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
janv. 19, 2017 9:35:26 AM org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator initiateService
WARN: HHH000342: Could not obtain connection to query metadata : No connection
janv. 19, 2017 9:35:26 AM org.hibernate.engine.jdbc.env.internal.LobCreatorBuilderImpl makeLobCreatorBuilder
INFO: HHH000422: Disabling contextual LOB creation as connection was null
janv. 19, 2017 9:35:26 AM org.hibernate.type.BasicTypeRegistry register
INFO: HHH000270: Type registration [byte[]] overrides previous : org.hibernate.type.BinaryType@17229821
janv. 19, 2017 9:35:26 AM org.hibernate.type.BasicTypeRegistry register
INFO: HHH000270: Type registration [[B] overrides previous : org.hibernate.type.BinaryType@17229821
janv. 19, 2017 9:35:26 AM org.hibernate.type.BasicTypeRegistry register
INFO: HHH000270: Type registration [Byte[]] overrides previous : org.hibernate.type.WrapperBinaryType@6cbe68e9
janv. 19, 2017 9:35:26 AM org.hibernate.type.BasicTypeRegistry register
INFO: HHH000270: Type registration [[Ljava.lang.Byte;] overrides previous : org.hibernate.type.WrapperBinaryType@6cbe68e9
janv. 19, 2017 9:35:26 AM org.hibernate.envers.boot.internal.EnversServiceImpl configure
INFO: Envers integration enabled? : true
[INFO] Performing Diff on database OTBSVC_U @ jdbc:oracle:thin:@//oralit-scan.infra.vs.ch:1521/OTBSVC_D (Default Schema: OTBSVC_U)
WARNING 19.01.17 09:35: liquibase: Liquibase needs to access the DBA_RECYCLEBIN table so we can automatically handle the case where constraints are deleted and restored. Since Oracle doesn't properly restore the original table names referenced in the constraint, we use the information from the DBA_RECYCLEBIN to automatically correct this issue.
The user you used to connect to the database (OTBSVC_U) needs to have "SELECT ON SYS.DBA_RECYCLEBIN" permissions set before we can perform this operation. Please run the following SQL to set the appropriate permissions, and try running the command again.
GRANT SELECT ON SYS.DBA_RECYCLEBIN TO OTBSVC_U;
INFO 19.01.17 09:35: liquibase: src\main\resources\liquibase\liquibase-diff-changeLog.xml does not exist, creating
[INFO] Differences written to Change Log File, src/main/resources/liquibase/liquibase-diff-changeLog.xml
Open to any idea. Thanks
Steve
Hi,
I'm having the same problem. Did you find a solution?
Hi, we're using a workaround - using the hibernate-spring but, as we're using persistence.xml in a jee environment, when creating the diff, we've to comment the "jta-data-source" in the persistence.xml in order to ensure that spring is not trying to look for a jndi datasource. Furthermore, we've added required plugin dependencies in the plugin, not in the project (in our pom.xml)
Let me know if you need more help, I can share some files with you
St
I face the same problem. Liquibase maven plugin should not search a JTA datasource, because there will not be any during development.