Я хотел бы сгенерировать diff между текущей базой данных в oracle и сущностями. Но diff не генерируется должным образом, и я думаю, что liquidate не видит мои объекты.
Я создал файл свойств liquibase со следующими настройками:
username=username
password=password
driver=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@server
referenceUrl=hibernate:spring:path.to.package.with.entities?dialect=org.hibernate.dialect.Oracle12cDialect
<liquibase.plugin.version>3.5.5</liquibase.plugin.version>
<liquibase.hibernate.version>3.6</liquibase.hibernate.version>
...
<dependencies>
<dependency>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-core</artifactId>
<version>3.8.0</version>
</dependency>
...
<build>
<plugins>
<plugin>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-maven-plugin</artifactId>
<version>${liquibase.plugin.version}</version>
<dependencies>
<dependency>
<groupId>org.liquibase.ext</groupId>
<artifactId>liquibase-hibernate5</artifactId>
<version>${liquibase.hibernate.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<version>2.1.7.RELEASE</version>
</dependency>
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>2.0.1.Final</version>
</dependency>
</dependencies>
<configuration>
<promptOnNonLocalDatabase>false</promptOnNonLocalDatabase>
<propertyFile>/src/main/resources/liquibase-plugin.properties</propertyFile>
<changeLogFile>src/main/resources/liquibase/master.xml</changeLogFile>
<diffChangeLogFile>src/main/resources/liquibase/updates/1-changeLog.oracle.sql</diffChangeLogFile>
<logging>debug</logging>
</configuration>
</plugin>
</plugins>
</build>
application-dev.yml
spring:
datasource:
driver-class-name: oracle.jdbc.driver.OracleDriver
url: jdbc:oracle:thin:@server
username: username
password: password
jpa:
properties:
hibernate:
default_schema: schema
show-sql: true
liquibase:
enabled: true
jpa:
hibernate:
naming:
physical-strategy: package.to.class.SnakeCasePhysicalNamingStrategy
И выполнить эту команду
mvn liquibase:diff -Dspring.profiles.active=dev
, но результат в 1-changeLog.oracle.sql равен
DROP TABLE COUNTRY;
DROP TABLE LANGUAGE;
DROP TABLE PROFILE;
DROP TABLE REGION;
DROP TABLE TIMEZONE;
DROP TABLE USERS;
DROP TABLE USER_ADDRESS;
DROP TABLE USER_STATUS;
DROP TABLE USER_SUBSERVICE;
DROP SEQUENCE SEQ_USERS;
Так что, на мой взглядспящий не видит мои сущности. Когда я устанавливаю referenceUrl для пакета, в котором нет сущностей, результат тот же.
Я тоже пробовал с
referenceUrl=hibernate:spring:path.to.package.with.entities?dialect=org.hibernate.dialect.Oracle12cDialect&hibernate.physical_naming_strategy=package.to.class.SnakeCasePhysicalNamingStrategy
, но вернул мне
Error setting up or running Liquibase: liquibase.exception.UnexpectedLiquibaseException: liquibase.exception.DatabaseException: java.lang.ClassNotFoundExcept
ion: package.to.class.SnakeCasePhysicalNamingStrategy
и класс находится в том же пакете, что и сущности.
Где может быть проблема, почему hibernate / liquibase не видит мои сущности? Спасибо.