5

私はliquibaseとhibernateに軽い問題があります.hbm2ddlが作成するように設定されているときにhibernateがスキーマを作成し、liquibaseにSQLスクリプトファイルをデータベースに入力させることを期待しています。
検証時には記述どおりに動作し、作成時にはそうではないことに気付きました。特に、hsqldb (メモリ内) を使用するテスト環境ではそうではありません。

休止状態による作成後にデータベースにデータを入力する場合のように、hsqldb で期待どおりに機能させる方法はありますか。これを読んでくれてありがとう。

4

1 に答える 1

6

Liquibase は、hbm2ddl の代わりとして使用するのが最適です。こうすることで、データベースがそのデータに適合する状態にあるときにデータの取り込みを行うことができ、後でチェンジセットが挿入されたデータを他の変更とともにアップグレードできます。最初に hbm2ddl を実行し、次に liquibase を実行してデータを入力する場合、常に挿入データ構造を変更する必要があります。

hibernate と liquibase を使用できる 1 つの方法は、開発中に ant または maven で liquibase diff ツールを使用して、データベースと hibernate モデルの違いに基づいて変更ログ ファイルに追加することです。常に期待どおりであるとは限らないため、行おうとしていることを確認してください (列の名前を変更する代わりに、列を削除して追加することを決定します)。変更ログ ファイルが作成されたら、たとえば、アプリの起動時に liquibase Spring Bean に渡すことで、他の変更ログ ファイルと同じように実行できます。liquibase は hbm2ddl を使用して、liquibase が現在のデータベースと比較する休止状態の「データベース」を生成するため、hbm2ddl と liquibase の両方を使用する必要はありません。

これにより、手順は次のとおりです。

  1. 休止状態のモデルに変更を加える
  2. hibernate と既存のデータベースの間で liquibase diff を実行します
  3. 新しい liquibase changeSet を調べます
  4. データベースに対して liquibase スクリプトを実行する

唯一の問題は、特に 1.9 では、ant やコマンド ラインのように、hibernate diff ツールが maven でサポートされない可能性があることです。

liquibase diff ツールを使用したくない場合は、変更ごとに手動で changeSets を変更ログ ファイルにいつでも追加できます。XML 形式は、手動で簡単に操作できるように設計されています。この場合の手順は次のとおりです。

  1. 休止状態のモデルに変更を加える
  2. 必要な changeSet を変更ログ ファイルに追加します
  3. データベースに対して liquibase スクリプトを実行する
  4. テストと繰り返し
于 2010-08-21T18:44:30.477 に答える