3

我想在 oracle 和实体中的当前数据库之间生成差异。但是差异没有正确生成,我认为清算没有看到我的实体。

我用这些设置创建了 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>

应用程序-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;

所以在我看来,hibernate 看不到我的实体。当我将 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看不到我的实体的问题在哪里?谢谢你。

4

0 回答 0