繁体   English   中英

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

[英]Hibernate and schema update when changing column type

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

@Entity
class Person {

    String lastName; //This is the new column
}

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

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

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

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

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

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

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

您应该研究一个真实的模式迁移工具,如liquibaseflyways

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM