web-dev-qa-db-ja.com

初めてhibernateでデータベーススキーマを作成し、スキーマが変更された場合にさらに更新する方法

初めて休止状態でデータベーススキーマを作成したい。さらに、新しいテーブルの追加や一部の列の削除など、スキーマに変更がある場合は、以前のデータを保持したまま既存のスキーマを更新します。

この質問 で指定されたオプションに従って、以前のデータを破壊するスキーマを作成するか、スキーマを更新することができます。

両方を実行できる値はありますか?

17
M Sach

実際にチェックしたところ<property name="hibernate.hbm2ddl.auto" value="update" />は、初めてテーブルを作成し、その後、テーブル/スキーマが存在する場合は更新します。

Updateプロパティは、新しいモデルを開始または追加するときに適用できます。以前に保存したエンティティインスタンスを保持したい。これは、デフォルトのスキーマ作成スタイルです。

必要に応じて、スキーマを更新しようとします。以下の更新がサポートされています。

私の観察のいくつかを見てください

  • フィールドを追加-新しい列がテーブルに追加されます。
  • フィールドの名前を変更-新しい列がテーブルに追加されますが、元の列は残りますが、使用されなくなります。 注:古い列のデータは新しい列に移行されません。
  • フィールドを削除-列は残りますが、使用されません。
  • フィールドタイプの変更-列のタイプは変更されないため、タイプの不一致の例外が発生する可能性があります。
  • エンティティを作成する-新しいテーブルを作成します。
  • エンティティの名前を変更-元のテーブルはそのままで、新しいテーブルを作成します。
  • エンティティを別のフォルダに移動-元のテーブルはそのままで、新しいテーブルを作成します。
  • エンティティを削除する-テーブルは残ります。
31
Jayasagar

'import.sql'を使用できます。

次のように、リソースにimport.sqlファイルを追加します。

/*create database at first time*/ 
CREATE SCHEMA your-database-name;

次のように「hibernate.cfg.xml」に行を追加します。

<hibernate-configuration>
    <session-factory>
       ...
       ...
       <property name="hbm2ddl.import_files">import.sql</property>
       ...
       ...
    </session-factory>
</hibernate-configuration>

したがって、データベースが存在しない場合、hibernateは新しいdbを作成します。

4
cguzel

エンティティの変更に基づいてdbスキーマを更新することはお勧めしません。 Flyway または Liquibase で試してください。 Stackoverflowで同様の質問を見つけることができます。 Hibernate/JPA DBスキーマ生成のベストプラクティス

1
Kris