代码之家  ›  专栏  ›  技术社区  ›  Vladimir Andreev

当我手动更改数据库结构时,Liquibase不会抛出错误

  •  0
  • Vladimir Andreev  · 技术社区  · 3 年前

    我有一个简单、典型的spring-boot应用程序,它使用PostgreSQL数据库。

    这是我的 项目.java 实体:

    @Entity
    @Getter
    @Setter
    public class Item {
    
        @Id
        @GeneratedValue(generator = "UUID")
        @GenericGenerator(name = "UUID", strategy = "org.hibernate.id.UUIDGenerator")
        public UUID id;
    
        private String name;
    
        private LocalDate added;
    
        private boolean available;
    
    }
    

    以下是我的liquibase脚本(在单独的*.sql文件中):

    --liquibase formatted sql
    --changeset author:001
    CREATE TABLE IF NOT EXISTS item (
        id        UUID                    NOT NULL CONSTRAINT PK_item PRIMARY KEY DEFAULT uuid_generate_v4(),
        name      VARCHAR UNIQUE          NOT NULL,
        added     DATE DEFAULT NOW() NOT NULL,
        available BOOLEAN   DEFAULT TRUE  NOT NULL
    );
    
    --liquibase formatted sql
    --changeset author:002
    INSERT INTO item (name, available) VALUES ('item1', TRUE);
    INSERT INTO item (name, available) VALUES ('item2', TRUE);
    INSERT INTO item (name, available) VALUES ('item3', FALSE);
    INSERT INTO item (name, available) VALUES ('item4', TRUE);
    INSERT INTO item (name, available) VALUES ('item5', TRUE);
    INSERT INTO item (name, available) VALUES ('item6', TRUE);
    INSERT INTO item (name, available) VALUES ('item7', FALSE );
    INSERT INTO item (name, available) VALUES ('item8', FALSE );
    INSERT INTO item (name, available) VALUES ('item9', FALSE );
    INSERT INTO item (name, available) VALUES ('item10', TRUE);
    

    还有我的 application.yml 文件

    spring:
    
      jpa:
        show-sql: true
        hibernate:
          ddl-auto: validate
    
      liquibase:
        change-log: liquibase/master.xml
        enabled: true
    

    好的,现在让我们考虑一下,我想手动更改或添加任何列到我的数据库结构中。

    我正在添加字段 “描述” 到我的 项目.java 实体:

    private String description;
    

    并将同一列直接添加到数据库中( 而不制作新的liquibase变更集 ):

    ALTER TABLE item ADD description VARCHAR(255);
    

    现在,我正在运行我的应用程序,预计会出现以下错误:

    Validation Failed:
     1 change sets check sum
    com/example/changelog.xml::1::example was: 8:63f82d4ff1b9dfa113739b7f362bd37d but is now: 8:b4fd16a20425fe377b00d81df722d604
    

    但是。。什么也没发生。。。我的应用程序运行非常正常:

    2023-06-18T11:44:32.214+02:00  INFO 9832 --- [  restartedMain] liquibase.database                       : Set default schema name to public
    2023-06-18T11:44:32.257+02:00  INFO 9832 --- [  restartedMain] liquibase.lockservice                    : Successfully acquired change log lock
    2023-06-18T11:44:32.405+02:00  INFO 9832 --- [  restartedMain] liquibase.changelog                      : Reading from public.databasechangelog
    2023-06-18T11:44:32.439+02:00  INFO 9832 --- [  restartedMain] liquibase.lockservice                    : Successfully released change log lock
    2023-06-18T11:44:32.479+02:00  INFO 9832 --- [  restartedMain] o.hibernate.jpa.internal.util.LogHelper  : HHH000204: Processing PersistenceUnitInfo [name: default]
    2023-06-18T11:44:32.507+02:00  INFO 9832 --- [  restartedMain] org.hibernate.Version                    : HHH000412: Hibernate ORM core version 6.1.7.Final
    2023-06-18T11:44:32.632+02:00  INFO 9832 --- [  restartedMain] SQL dialect                              : HHH000400: Using dialect: org.hibernate.dialect.PostgreSQLDialect
    2023-06-18T11:44:32.741+02:00  INFO 9832 --- [  restartedMain] o.h.c.beanvalidation.TypeSafeActivator   : Error calling `jakarta.validation.Validation#buildDefaultValidatorFactory`
    

    我需要修复它并防止任何 手动更改 在我的数据库结构中。仅通过添加新的其他变更集。如何实施?非常感谢。

    0 回复  |  直到 3 年前