Liquibase + Hibernate重命名列

时间:2016-09-14 06:51:09

标签: java hibernate jpa liquibase liquibase-hibernate

我使用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 ..

2 个答案:

答案 0 :(得分:2)

您是否尝试使用变更集如下(或者我的问题是错误的)

-Dhidpi=true

答案 1 :(得分:0)

目前通常没有办法让diff能够检测到列更改是重命名而不是删除并创建。对于使用差异创建更改的任何系统都是如此,而不仅仅是Liquibase。

将自己想象为liquibase - 您将获得两个处于您描述状态的表格。您如何确定已重命名列与删除的一列以及另一列已创建?我唯一能想到的就是需要查看列的 内容 ,看看它们“大部分都是一样的”。在这种特殊情况下,这是不可能的,因为正在比较的数据库包括一个填充了数据的数据库,另一个数据库只是一个由Hibernate创建的空内存数据库。