web-dev-qa-db-ja.com

移行のためのJPA / Hibernateサポート?

私は現在、JPA/Hibernateを使用してH2データベースにデータを永続化するデスクトップアプリケーションに取り組んでいます。将来、何らかの理由でデータベーススキーマに変更を加える必要がある場合、どのようなオプションがあるのか​​知りたいです。たぶん、新しいエンティティを導入するか、それらを削除するか、エンティティのプロパティのタイプを変更する必要があります。

  • これを行うためのJPA/Hibernateのサポートはありますか?
  • ソリューションを手動でスクリプト化する必要がありますか?
28

私は通常、開発中にHibernateにDDLを生成させ、テストサーバー(後でUATサーバーとライブサーバーにも使用します)にデプロイするときに手動のSQL移行スクリプトを作成します。

HibernateのDDL生成は、データ移行をまったくサポートしていません。null以外のフィールドを追加するだけの場合、DDL生成は役に立ちません。

これを支援するために本当に役立つ移行の抽象化をまだ見つけていません。

多くのライブラリがあります(例を見てください 例としてこれSO質問 )が、既存のエンティティを階層に分割するようなことをしているとき継承に参加すると、常にプレーンSQLに戻ります。

22
Henning

たぶん、新しいエンティティを導入するか、それらを削除するか、エンティティのプロパティのタイプを変更する必要があります。

私はそれについての経験はありませんが、Liquibaseはいくつかの Hibernate Integration を提供し、マッピングをデータベースと比較して適切な変更ログを生成できます。

LiquiBase-Hibernate統合は、現在のHibernateマッピングに必要なデータベースの変更を変更ログファイルに記録し、実行前に必要に応じて検査および変更できます。

それで遊んで、私の保留中の質問に対するいくつかの答えを見つける機会をまだ探しています:

  • 注釈を使用すると機能しますか?
  • hibernate.cfg.xmlファイルが必要ですか(これは大きな障害にはなりませんが)?

更新:わかりました、両方の質問は この応答 のNathan Voxlandによってカバーされており、答えは次のとおりです。

  • yesアノテーションを使用すると機能します
  • yeshibernate.cfg.xmlが必要です(今のところ)
7
Pascal Thivent

2つのオプションがあります。

  • db-to-hibernate-DBの変更をエンティティに手動でミラーリングします。これは、DBが「リード」していることを意味します
  • hibernate-to-db-hibernate.hbm2ddl.auto=updateを使用するか、エンティティの変更後にDBを手動で変更します-ここでは、オブジェクトモデルが「リード」しています
2
Bozho