エンティティに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ファイルのチェックサムは、新しいコンテンツが含まれるようになったため変更されます。また、データベースには、適用されたすべてのchangeLogを格納するDATABASECHANGELOG
というテーブルがあり、これにはチェックサムデータが含まれています。
これで、アプリケーションを起動すると、変更されたエンティティのチェックサムの最新のliquibase changeLogが前回実行したときとは異なるため、エラーが発生します(データベースには前のバージョンのこのliquibaseファイルのチェックサムがあります)。
_mvn liquibase:clearCheckSums
_は、必要な場合を除いて、ほとんどの場合、適切なアプローチではありません。これにより、データベース内のすべてのチェックサムが実際にクリアされます。通常は意図されていない、発生した変更を追跡できなくなります。 liquibaseのこれらの機能は、たとえば、適用した新しい変更をロールバックする場合などに意味があります。チェックサムをクリアしてアプリケーションを実行すると、新しいチェックサムが計算され、トラックを失い、十分な注意が払われていないと問題が発生する可能性があります。
適切な解決策:
entity sub-generator
_または_jdl import
_または_manual changes to your entities directly
_を使用してエンティティに変更を加えます。'.._added_entity_...'
_が含まれます。例えば。 _'config/liquibase/changelog/20180607110114_added_entity_Employee.xml'
_。mvn liquibase:diff
_を実行する必要があります。これにより、changeLogファイルが生成されます。手動で一度確認し、liquibaseの_master.xml
_ファイルに追加します。 liquibaseはすべてのchangeLogでこのファイルを参照するため、マスターファイルに追加する必要があります。要約すると、jhipstercliはエンティティのliquibaseファイルを上書きします。以前に生成されたliquibaseファイルを上書きする代わりに、それらを元に戻し、_mvn liquibase:diff
_を実行して、エンティティへの新しい変更を新しいchangeLogにキャプチャします。チェックサムエラーが解決され、データベースの変更もliquibaseにキャプチャされていることがわかります。
参照:
- liquibaseおよびJhipsterデータベースの更新を処理する方法。 _Database updates
_で見出しを確認してください
DBで次のクエリを実行してみてください。UPDATEDATABASECHANGELOGSETMD5SUM = null WHERE ID = 'YOUR TABLE ID';
この場合のテーブルIDは= 20170221193921-1のようです。
コマンドjhpster entity xxxx
を使用してJhipsterに列を追加すると、個別のチェンジセットとして追加されません。代わりに、テーブルを作成するための既存の変更セットに列が追加され、ファイルに変更があると、新しいチェックサムが生成されます。起動時にはDBとは異なるため、検証は失敗します
<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>
この問題を修正するには、以下に示すように、タグとして列を追加して新しいチェンジセットを追加します。
<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