java - Liquibase:diff 总是生成索引

标签 java spring maven spring-boot liquibase

我正在使用带有 liquibase-maven-plugin 的 spring-boot 来根据我的类生成数据库更改,但是“mvn compile liquibase: diff”命令总是会生成索引和外键的删除和包含,即使数据库已更新并且类没有变化(因此数据库中应该没有变化)。

有人知道这是否正确或如何避免吗?我只希望在项目的更改集中生成对数据库的新更改。

最佳答案

首先,我认为您缺少 liquibase-hibernate4 maven插件。

来自项目Readme.md:

This extension lets you use your Hibernate configuration as a comparison database for diff, diffChangeLog and generateChangeLog in Liquibase.

这实际上意味着您可以使用它来将真实数据库与您的 java 实体进行比较,以生成新的变更日志。

正如项目 wiki 建议的那样,重要的是要记住,如果出现问题,您需要查看新的变更日志并手动修改它。

我也推荐你阅读这篇 article from Baeldung这解释了:

您的 pom.xml 应如下所示:

...
<dependencies>
  ...
  <dependency>
    <groupId>org.liquibase</groupId>
    <artifactId>liquibase-core</artifactId>
    <version>3.4.1</version>
  </dependency>
  <dependency>
    <groupId>org.liquibase</groupId>
    <artifactId>liquibase-maven-plugin</artifactId>
    <version>3.4.1</version>
  </dependency> 
  ...
</dependencies>
...
<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>
...

还有你的 src/main/resources/liquibase.properties:

url=jdbc:mysql://localhost:3306/your_db
username=your_user
password=your_pw
driver=com.mysql.jdbc.Driver #orYourDriver
outputChangeLogFile=src/main/resources/liquibase-outputChangeLog.xml
hibernate:spring:your.model.package?dialect=org.hibernate.dialect.MySQLDialect&hibernate.physical_naming_strategy=org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy&hibernate.implicit_naming_strategy=org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy

我不确定您使用的是哪种持久性存储,但请确保使用正确的驱动程序和数据源 URL。

配置完成后,你应该可以运行 mvn liquibase:diffChangeLog 来生成新的变更日志了。

关于java - Liquibase:diff 总是生成索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46019203/

相关文章:

java - 泰坦,RexterClient :Message received response timeoutConnection (8000 s) at com.tinkerpop.rexster.client.RexsterClient.execute(RexsterClient.java:185)

java - 从 Phantomjs 驱动开始

java - RabbitMQ Spring 模板在发送 15 条消息后抛出尝试使用关闭 channel

java - Hibernate Spring JPA javax.persistence.TransactionRequiredException : No transactional EntityManager available

java - 'One to many mapping' 场景中子实体的 findById 操作返回递归子实体。需要解决方案

maven - 配置duplicate-finder-maven-plugin仅扫描特定位置并排除其他所有内容

java - 子模块的父 POM 依赖关系树发现 (Maven)

java - 了解 xmpp 中的术语 "extension","component"和 "plugin"?

java - 如何通过上传 .war 文件在 tomcat 上部署 java webapp

java - 如果身份验证失败,则关闭 HTTP 连接