更改列类型时更新Hibernate和架构

时间:2015-06-15 17:53:15

标签: java hibernate jpa

我有Hibernate来设置我的实体。对于开发人员环境,我希望Hibernate处理架构更新(主要是一些添加新列,删除或编辑列类型)。添加新列时,Hibernate会添加它。从实体中删除字段不会导致列从数据库中删除。在一些帖子中,我读到这是正常行为。但是当我尝试编辑实体字段的类型时会出现问题:

@Entity
class Person {

    String lastName; //This is the new column
}

这导致Hibernate添加一个VARCHAR(255)类型的列,其默认值为NULL,NOT NULL为YES。

数据库已经有一条记录(我正在测试行为)所以Hibernate使用值为空字符串的现有行为添加了列。我没有在实体的构造函数中添加列的初始化。

将列类型更改为int会产生错误。 Hibernate引发了IllegalArgumentException尝试将Null值添加到int字段。

我认为Hibernate会删除列,重新创建它,并添加Null值没有问题(因为int字段可以有NULL值)。总是在列名中给出默认值是一种好习惯吗?也许在PrePersist的功能中?

@PrePersist
public void prePersist(){
    this.lastName = 5; //after changing lastName to int.
}

我想在此添加即使在开发中我们也不想放弃表格。我们希望保持现有价值。

1 个答案:

答案 0 :(得分:3)

您使用的是错误的工具。 Hibernate架构迁移,从未被假定为架构迁移的完整解决方案。您可能会发现当前问题的解决方案只是偶然发现下一个问题。

您应该查看真实的架构迁移工具,例如liquibaseflyways