/ / Liquibase + Hibernateカラムの名前変更 - java、hibernate、jpa、liquibase、liquibase-hibernate

Liquibase + Hibernateリネームカラム - java、hibernate、jpa、liquibase、liquibase-hibernate

私は自分のデータを保存するためにH2データベースを使用し、そしてデータベースとprojetの間の違いをチェックするために(hibernateプラグインで)liquibaseを使用しています。

次のコードがあるとします。

@Entity
public class myEntity{

@Column(name="val")
private int value;

}

データベースは適切に配置されており、すでにいくつかのデータを格納しています。

上記のColumnの名前をvalからvalueに変更してliquibase:diffを実行すると、difflogは列 "val"を削除して列 "value"を追加するように指示します。

もともと "val"列に格納されていたすべてのデータが消えてしまうので、明らかにこれは私が望んでいたものではありません。

リキベースに新しい列ではなく、古い列に名前を変更したことを伝える方法はありますか。

私はliquibase:diffを実行したいのですが、生成されたdiffLogは自動的に私のColumnのためのrename ...タグを含むべきです。

回答:

回答№1は2

あなたは次のようにチェンジセットを使ってみましたか(あるいは私は質問を間違っていましたか?)

   <changeSet author="liquibase-docs" id="renameColumn-example">
<renameColumn columnDataType="int"
newColumnName="value"
oldColumnName="val"
remarks="A change in names"
schemaName="public"
tableName="myEntity"/>
</changeSet>

回答№2の場合は0

現在のところdiffには一般的な方法はありません列の変更がドロップアンド作成ではなく名前変更であることを検出できるようにするため。これは、Liquibaseだけでなく、diffを使って変更を加えるシステムにも当てはまります。

自分をリキベースとして想像してください - あなたは2つ与えられていますあなたが記述する状態にあるテーブル。一方の列がドロップされ、もう一方の列が作成されたのに対して、列の名前が変更されたとどのように判断しますか?私が考えることができる唯一の事はそれを見る必要があるだろうということです 内容 そして、それらが「主にこの特定のケースでは、比較されているデータベースにデータが入力されているデータベースと、Hibernateによって作成された単なる空のインメモリデータベースであるデータベースが含まれるため、これは不可能です。