首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >修改实体后jhipster液基验证错误

修改实体后jhipster液基验证错误
EN

Stack Overflow用户
提问于 2017-04-04 20:23:27
回答 4查看 13.5K关注 0票数 9

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

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

代码语言:javascript
复制
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

我还尝试了以下几种方法:

代码语言:javascript
复制
./mvnw liquibase:clearCheckSums

结果就是BUILD SUCCESS

我也尝试过。/mvnw liquibase:update和updateSQL,同样的结果。

谁能告诉我我对JHipster的问题在哪里?

EN

回答 4

Stack Overflow用户

发布于 2018-06-09 05:26:39

当我们使用liquibase时,所有后来发生的实体变化都应该被捕获为单独的changelogs(例如,像添加新列一样更改表)。Jhipster似乎总是覆盖相应的liquibase文件(通常是模式'config/liquibase/changelog/20180607110114_added_entity_Employee.xml')。因此,实体liquibase文件的校验和会发生变化,因为它现在有了新的内容。在您的数据库中,有一个名为DATABASECHANGELOG的表,其中存储了应用了哪些changeLogs,并且具有校验和数据。

现在,当您启动您的应用程序时,您将得到错误,因为您的修改实体的校验和的最新的liquibase不同于您上次运行的(数据库将有此liquibase文件的校验和用于以前的版本)。

除非需要,否则mvn liquibase:clearCheckSums在大多数情况下都不是正确的方法。这实际上清除了数据库中的所有校验和。您失去了对已发生的更改的跟踪,这通常不是有意的。例如,当你想要回滚你已经应用的新更改时,liquibase的这些特性是有意义的。如果您清除校验和并运行应用程序,它将计算新的校验和,您将失去跟踪,如果没有足够的关注,可能会给您带来麻烦。

的正确解决方案:

使用jhipster entity sub-generatorjdl importmanual changes to your entities directly.

  • Now对实体进行更改检查相应的
  1. 文件的实体是否已更改。通常名称包含'.._added_entity_...'。例如。'config/liquibase/changelog/20180607110114_added_entity_Employee.xml'.
  2. Revert将该文件恢复到原来的状态,以防它被覆盖。Git对reverting.
  3. If很有帮助,你现在启动应用程序,你不会得到验证校验和错误,因为文件的校验和匹配。
  4. ,但我们对entity所做的更改不会被捕获到liquibase中。为此,您必须运行mvn liquibase:diff。这将生成一个changeLog文件。手动检查一次,并将其添加到liquibase的master.xml文件中。添加到主文件是必须的,因为在您现在运行应用程序时,所有changeLogs.
  5. If都会引用此文件。如果没有应用changeLogs,则liquibase将尝试在数据库上应用这些新的更改。

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

参考:

使用Database updates检查

票数 23
EN

Stack Overflow用户

发布于 2017-04-04 22:35:25

尝试在数据库中执行以下查询: UPDATE DATABASECHANGELOG SET MD5SUM = null WHERE ID=‘您的表ID';

在本例中,您的表ID似乎是= 20170221193921-1。

票数 4
EN

Stack Overflow用户

发布于 2018-12-10 04:09:35

当我们使用命令jhpster entity xxxx在Jhipster中添加一列时,它并不是作为单独的变更集添加的,而是将该列添加到create table的现有变更集中,并且当文件中有更改时,将生成新的校验和,并且在启动时它与DB不同,因此验证失败

代码语言:javascript
复制
<changeSet id="20181209164925-1" author="jhipster" >    
    <createTable tableName="xxxxxx">
        <column name="id" type="bigint" autoIncrement="${autoIncrement}">
            <constraints primaryKey="true" nullable="false"/>
        </column>
        <column name="xxxxx" type="integer">

            <constraints nullable="true" />
        </column>
        <column name="xxxxx" type="integer">
            <constraints nullable="true" />
        </column>
        <column name="xxxxxx" type="varchar(140)">
            <constraints nullable="true" />
        </column> 
        <column name="xxxx" type="bigint">
            <constraints nullable="true" />
        </column>
        <!-- jhipster-needle-liquibase-add-column - JHipster will add columns here, do not remove-->
    </createTable>

要解决此问题,请使用下面的add column as tag ..shown添加新的变更集

代码语言:javascript
复制
<changeSet id="20181209164925-2" author="jhipster" runOnChange="true">      
    <addColumn tableName="xxxxxx">
         <column name="xxxxxx" type="date"></column>
    </addColumn>

参考https://www.liquibase.org/documentation/changes/add_column.html

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43207163

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档