【问题标题】:liquibase:diff not giving me expected resultliquibase:diff 没有给我预期的结果
【发布时间】:2019-04-01 12:52:02
【问题描述】:

我有一个JPA entity 叫客户,是这样的

@Entity
public class Customer {



private int custNo;
private String custName;
private String country;

public Customer() {
}

public Customer(int custNumber, String custName, String country) {
    this.custNo = custNumber;
    this.custName = custName;
    this.country = country;
}

public int getCustNo() {
   return custNo;
}

public void setCustNo(int custNo) {
   this.custNo = custNo;
}

public String getCustName() {
   return custName;
}

public void setCustName(String custName) {
   this.custName = custName;
}

public String getCountry() {
   return country;
}

public void setCountry(String country) {
   this.country = country;
}
}

我的数据库有 2 个表:- BE132_name 和 BE1jj231_address ,

我正在运行我的个人资料liquibase:diff,并为我提供如下更改集

    <changeSet author="jobs (generated)" id="1554122585461-10">
    <dropTable tableName="BE132_name"/>
    </changeSet>
    <changeSet author="jobs (generated)" id="1554122585461-11">
    <dropTable tableName="BE1jj231_address"/>
    </changeSet>

您可以看到它创建了删除表,因为我没有相应的JPA 实体。但是为什么它不为我的客户创建 create script 呢?

对于一个空的数据库(没有任何表),我得到了

 INFO 4/2/19 5:47 PM: liquibase: No changes found, nothing to do

【问题讨论】:

  • 是不是因为数据库中的表还不存在?有人可以帮我吗?

标签: spring-data-jpa liquibase


【解决方案1】:

我为此使用了liquibase-hibernate plugin!。它能够为 JPA 实体生成changeset,即使其对应的表不在数据库中。

插件

<plugins>
    <plugin>
        <groupId>org.liquibase</groupId>
        <artifactId>liquibase-maven-plugin</artifactId>
        <version>3.4.1</version>
        <configuration>                  
            <propertyFile>src/main/resources/liquibase.properties</propertyFile>
        </configuration> 
        <dependencies>
            <dependency>
                <groupId>org.liquibase.ext</groupId>
                <artifactId>liquibase-hibernate4</artifactId>
                <version>3.5</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-beans</artifactId>
                <version>4.1.7.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.data</groupId>
                <artifactId>spring-data-jpa</artifactId>
                <version>1.7.3.RELEASE</version>
            </dependency>
        </dependencies>               
    </plugin> 
</plugins>

还有liquibase.properties

changeLogFile=classpath:liquibase-changeLog.xml
url=jdbc:mysql://localhost:3306/oauth_reddit
username=tutorialuser
password=tutorialmy5ql
driver=com.mysql.jdbc.Driver
referenceUrl=hibernate:spring:org.baeldung.persistence.model
  ?dialect=org.hibernate.dialect.MySQLDialect
diffChangeLogFile=src/main/resources/liquibase-diff-changeLog.xml

referenceUrl 正在使用包扫描,所以需要 dialect 参数。 changeLogFile 是数据库同步的变更集的位置。 diffChangeLogFile 是必须刷新差异变更日志的位置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-29
    • 1970-01-01
    • 2019-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-09
    相关资源
    最近更新 更多