我使用H2数据库来存储我的数据,并使用liquibase(使用hibernate插件)来检查数据库和项目之间的差异。
假设我有以下代码:
@Entity
public class myEntity{
@Column(name="val")
private int value;
}
数据库已就位,已经存储了一些数据。
现在当我重命名上面的列,即从val到value并运行liquibase:diff时,difflog说要删除列" val"并添加一列"值"。
显然这不是我想要的,因为所有数据最初存储在" val"专栏将会消失。
有没有办法告诉liquibase它不是一个新列,而是一个旧的重命名列?
我想运行liquibase:diff并且生成的diffLog应该自动包含我的Column的rename ...标签,而不是add ..和drop .. one ..
答案 0 :(得分:2)
您是否尝试使用变更集如下(或者我的问题是错误的)
-Dhidpi=true
答案 1 :(得分:0)
目前通常没有办法让diff能够检测到列更改是重命名而不是删除并创建。对于使用差异创建更改的任何系统都是如此,而不仅仅是Liquibase。
将自己想象为liquibase - 您将获得两个处于您描述状态的表格。您如何确定已重命名列与删除的一列以及另一列已创建?我唯一能想到的就是需要查看列的 内容 ,看看它们“大部分都是一样的”。在这种特殊情况下,这是不可能的,因为正在比较的数据库包括一个填充了数据的数据库,另一个数据库只是一个由Hibernate创建的空内存数据库。