spring - 修改实体后,jhipster liquibase验证错误

标签 spring spring-boot h2 jhipster

我试图将一个字段作为CLOB添加到我的实体中。使用JHipster CLI时,添加它没有问题。

现在,当我尝试启动我的应用程序时,我从liquibase收到以下验证错误:

liquibase.exception.ValidationFailedException: Validation Failed:
     1 change sets check sum
          config/liquibase/changelog/20170221193921_xxxxxxxx.xml::20170221193921-1::jhipster was: 7:d8b3f42d8d4d523c7b14f93b4c7657c7 but is now: 7:a2a365179a0d231c2771ebd79f51b1fc

我也尝试了以下方法:
./mvnw liquibase:clearCheckSums

结果是BUILD SUCCESS

我还尝试了./mvnw liquibase:update和updateSQL,结果相同。

谁能告诉我我的JHipster问题是什么?

最佳答案

当我们使用liquibase时,以后发生的所有实体更改都应捕获为单独的更改日志(例如,更改表,例如添加新列)。 Jhipster cli似乎总是会覆盖对应的liquibase文件(通常是'config/liquibase/changelog/20180607110114_added_entity_Employee.xml'模式)的实体(无论更改了什么)。因此,实体liquibase文件的校验和更改了,因为它现在具有新内容。在您的数据库中,有一个名为DATABASECHANGELOG的表,该表存储了已应用了所有changeLog的表,并且该表具有校验和数据。

现在,当您启动应用程序时,您会收到错误消息,因为修改后的实体的校验和的最新liquibase changeLog与您上次运行的时间不同(数据库将为此liquibase文件提供校验和)。

除非需要,否则mvn liquibase:clearCheckSums在大多数情况下不是正确的方法。实际上,这将清除数据库中的所有校验和。您会忘记通常不会发生的已发生的更改。 liquibase的这些功能很有意义,例如,当您想回滚已应用的新更改时。如果清除校验和并运行应用程序,它将计算新的校验和,您将失去跟踪,并且如果没有引起足够的重视,可能会惹上麻烦。

正确的解决方案:

  • 使用jhipster entity sub-generatorjdl importmanual changes to your entities directly对您的实体进行更改。
  • 现在检查与实体liquibase文件对应的实体是否已更改。通常名称包含'.._added_entity_...'。例如。 'config/liquibase/changelog/20180607110114_added_entity_Employee.xml'
  • 将该文件恢复为被覆盖时的状态。 Git在这里有助于恢复。
  • 如果现在启动应用程序,则由于文件的校验和匹配,您将不会收到验证校验和错误。
  • 但是我们对实体所做的更改未在liquibase中捕获。为此,您必须运行mvn liquibase:diff。这将生成一个changeLog文件。手动检查一次,然后将其添加到liquibase的master.xml文件中。必须添加到主文件,因为liquibase会为所有changeLogs引用此文件。
  • 如果立即运行该应用程序,则如果未应用changeLogs,那么liquibase将尝试在数据库上应用这些新更改。

  • 总而言之,jhipster cli会覆盖实体liquibase文件。还原它们并运行mvn liquibase:diff以在新的changeLog中捕获对实体的新更改,而不是覆盖以前生成的liquibase文件。我们可以看到校验和错误已解决,并且在liquibase中也捕获了数据库更改。

    引用:
    -How to deal with liquibase and Jhipster database updates.
    Database updates检查标题

    关于spring - 修改实体后,jhipster liquibase验证错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43207163/

    相关文章:

    java - spring-data-mongodb 在一个 Mongo 实例中连接多个数据库

    java - 如何添加一个额外的监听器来监听 Spring AMQP 队列?

    java - 向JPA和Hibernate注册SQL函数

    java - Spring Boot 中 “throw new SilentExitException()” 处的断点

    java - JDOFatalUserException : Persistence Manager has been closed

    java - JPA 集合在映射表中有不需要的唯一约束

    java - spring restTemplate动态映射

    java - Spring Boot 测试 : Test Response throws "Could not find acceptable representation" , App 正常运行

    java - 如何从 CSV 读取 H2 结果集,并重置光标以进行第二遍

    java - 您可以在自动配置的 Spring Boot H2 测试数据库上设置兼容模式吗?