web-dev-qa-db-ja.com

Hibernate hbm2ddl.auto = updateはMySQLの列定義を更新しません

Hbm2ddl.auto = updateで既存のテーブルを更新しようとしています。

データベースの列定義がエンティティの宣言から変更されるいくつかのテーブルにいくつかの列があります。お気に入り

@Column(name="mycolumn", nullable=false, length=10)
private Long mycolumn;

そして

'mycolumn' bigint(20)not null default 0

mySQLで。

なぜhbm2ddlはそのようなものを更新しないのですか?そして、そのような更新を強制することは可能ですか? hbm2ddlと言って、列のデフォルト値を削除し、型の長さを変更したいと思います。

23
Anatoly

hibernate.hbm2ddl.auto" value="update既存のテーブル列定義を変更しません。いくつかのテストを行って、私はそれを見つけました:

hibernate.hbm2ddl.auto" value="updateは、まだ存在していないdb列を追加します。

hibernate.hbm2ddl.auto" value="updateは、削除された/エンティティに存在しなくなったdb列を削除しません。

hibernate.hbm2ddl.auto" value="updateは、すでに作成されているdb列を変更しません。

テーブルのスキーマをエンティティと同期させるには、テーブルデータをバックアップしてドロップし、アプリケーションを再起動する必要があります。次に、データをリロードします。

見る:
hibernate.hbm2ddl.auto = updateに明確さが必要

そして
hbm2ddl.autoの可能な値とその機能を休止状態にしますか?

39
jeff