31

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

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

3 に答える 3

24

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

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

これを支援する本当に有用な移行の抽象化をまだ見つけていません。

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

于 2010-10-13T12:40:18.907 に答える
7

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

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

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

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

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

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

  • はい、注釈を使用すると機能します
  • はい、hibernate.cfg.xmlが必要です(今のところ)
于 2010-10-13T15:46:15.037 に答える
2

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

  • db-to-hibernate - DB の変更をエンティティに手動でミラーリングします。これは、DBが「リード」していることを意味します
  • hibernate-to-db - を使用するかhibernate.hbm2ddl.auto=update、エンティティを変更した後に手動で DB を変更します - ここで、オブジェクト モデルは「主要」です
于 2010-10-13T12:49:34.643 に答える