【问题标题】:JHipster :Removing a field from an entity: Liquibase does not remove the field from the database : Validation failed errorJHipster:从实体中删除字段:Liquibase 不会从数据库中删除字段:验证失败错误
【发布时间】:2019-09-13 16:45:54
【问题描述】:

所以我有一个 Jhipster 实体,我正在使用命令“Jhipster entity Model”删除一个字段,用于我已经调用 Model 的实体 .它从前端和 java 代码中删除了该字段,但该列仍然在数据库中(基于 h2 磁盘)以及该字段中每一行的数据。

我在 spring 应用程序启动时收到此错误

 1 change sets check sum
      config/liquibase/changelog/20190411130704_added_entity_Model.xml::20190411130704-1::jhipster was: 7:03313fa12946fa4bb3e16f838f8dc4d7 but is now: 7:aed492b04b5a800b82655ff2eabd0f65


 liquibase.exception.ValidationFailedException: Validation Failed:
 1 change sets check sum
     config/liquibase/changelog/20190411130704_added_entity_Model.xml::20190411130704-1::jhipster was: 7:03313fa12946fa4bb3e16f838f8dc4d7 but is now: 7:aed492b04b5a800b82655ff2eabd0f65

【问题讨论】:

    标签: jhipster liquibase


    【解决方案1】:

    您遇到此错误是因为您的 changeSet 在上次执行 liquibase 后已更改,因此校验和已更改。

    要解决此问题,请将<validCheckSum> 标签添加到您的<changeSet>

    如错误中所述,新校验和为7:aed492b04b5a800b82655ff2eabd0f65

    所以将<validCheckSum>7:aed492b04b5a800b82655ff2eabd0f65</validCheckSum> 添加到变更集。

    或者添加<validCheckSum>ANY</validCheckSum>,但这确实是一个不好的做法。

    当您更改数据库模型时,不应更改现有的changeSet。您应该使用正确的<preconditions><dropColumn> 编写另一个删除列的changeSet

    例如:

    <changeSet id="foo" author="bar">
        <preConditions onFail="MARK_RAN">
            <columnExists tableName="your_table" columnName="your_column"/>
        </preConditions>
        <dropColumn tableName="your_table" columnName="your_column"/>
    </changeSet>
    

    【讨论】:

    • 这似乎是我正在寻找的。非常感谢。老实说,我只是按照 Jhipster 默认所做的,而不是他们当时的最佳做法?
    • 我对 Jhipster 不熟悉,但看起来很像。
    • 查看 JHipster 文档了解如何使用 Liquibase jhipster.tech/development/#database-updates
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-29
    • 2011-07-19
    • 2021-07-01
    • 1970-01-01
    • 2013-02-21
    相关资源
    最近更新 更多