Hibernateを使用したデータベーススキーマを更新します
質問
<property name="hibernate.hbm2ddl.auto">update</property>
データベーススキーマを作成し、プロパティ、制約、キーなどを自動的に追加することができます...しかし、データベーススキーマの更新についてはどうですか?エンティティからいくつかのプロパティを削除した場合、Hibernateは削除しません。または、制約を変更した場合、Hibernateは既に作成された制約に触れていません...
では、冬眠を実際にデータベーススキーマを更新させる方法がありますか?
ありがとう。
解決
データベースの列とテーブルの必要なドロップを作成し、データベースの更新用に生成されたSQLにこれらのドロップを追加する独自のツールを作成しました。しかし、それを機能させるには、スキーマアップ生成にいくつかのエキストラを追加する必要がありました。
- Not Nullプロパティのチェックを追加する必要がありました。これには、可能であればヌルをEleminateするためのデータに関する更新ステートメントの発行と、デフォルト値の次のポイントにつながることが含まれます。
- 列のデフォルト値のチェックを追加する必要がありました。デフォルトは、列とそのデータ型の無効性によって推測されます。プリミティブは常にゼロまたはfalseに初期化され、最初の列挙値には無効ではありませんが、他のオブジェクトの場合、スクリプトを手動で変更する必要があります。
- データベースの列の長さと
@Column(length)
異なっていた。
しかし、それをすべてまとめるために、列がコードで名前が変更された場合はどうでしょう?タイプが自動的にコンバーチブルではない方法で変更された場合はどうなりますか(これまでのブール?)。リファクタリング履歴にアクセスできない場合、変更を常に伝播することはできません。
他のヒント
現在使用しています リキバーゼ データベースの不可知論的方法で自動データベースの変更を行う。冬眠注釈からリキバーゼコマンドを直接抽出することは可能かもしれませんが、そのようなツールが存在するとは思わないので、おそらく自分でやらなければならないでしょう。
いいえ、ありません。 HBM2DDLは、スキーマ移行を完全に管理することを意図したものではありません。スキーマとハンド編集(生成されたスクリプト)の追加の変更のみにのみ使用する場合に最適です。
Hibernateは、Schemaupdateというクラスを提供します。これは、Hibernateマッピングのセットをデータベーススキーマと同期させることができます。
古い投稿, 、しかし、それが良いかどうかコミュニティに知らせてください:)