我有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.
}
我想在此添加即使在开发中我们也不想放弃表格。我们希望保持现有价值。