Liquibase: diff всегда генерирует индексы

Я использую spring-boot с плагином Liquibase-maven для генерации изменений базы данных в соответствии с моими классами, но команда "mvn compile liquidibase: diff" всегда генерирует удаление и включение индексов и внешних ключей, даже если база данных обновляется и не имеет изменений в классах (и поэтому не должен иметь никаких изменений в базе данных).

Кто-нибудь имеет представление, правильно ли это или как его избежать? Я хочу, чтобы новые изменения в базе данных генерировались в наборах изменений проекта.

Ответы

Ответ 1

Прежде всего, я думаю, что вам не хватает плагина libibase-hibernate4 maven.

Из проекта Readme.md:

Это расширение позволяет использовать конфигурацию Hibernate в качестве базы данных сравнения для diff, diffChangeLog и generateChangeLog в Liquibase.

Что на самом деле означает, что вы можете использовать его для сравнения реальной базы данных с вашими объектами Java, чтобы генерировать новые изменения.

Как предполагает вики проекта, важно иметь в виду, что вам нужно взглянуть на новые изменения и изменить его вручную, если что-то не так.

Я также рекомендую вам прочитать эту статью из 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

Я не уверен, какое хранилище сохраняемости вы используете, но, пожалуйста, обязательно используйте правильные драйверы и источники данных.

После его полной настройки вы сможете запустить mvn liquibase:diffChangeLog для генерации новых изменений.