java默认值在hibernate中不起作用
我使用columnDefinition
为一列指定默认值,但是它不存储默认值,只存储null
请帮忙,下面是我的代码
private String sourceFrom;
@Column(name = "SourceFrom", columnDefinition = "varchar(15) default 'Case'")
public String getSourceFrom() {
return sourceFrom;
}
public void setSourceFrom(String sourceFrom) {
this.sourceFrom = sourceFrom;
}
# 1 楼答案
在DB端设置默认值。如果您想在实体映射中使用它,只需按如下所示设置默认值
私有字符串sourceFrom=“Case”
# 2 楼答案
您提出的解决方案应该可以工作,但依赖于数据库,所以您可能需要检查语法是否真的适用于具体的数据库。另一种更通用的方法是
干杯
# 3 楼答案
默认值是在数据库中定义的,所以Hibernate不使用它。 默认值由数据库设置,但您创建的实体已在hibernate缓存中(可以是会话缓存或二级缓存)
如果加载实体,它来自Hibernate缓存,而不是数据库
要解决此问题,请执行以下操作之一:
session.refresh(yourEntity)
@PrePersist
侦听器# 4 楼答案
@Column.columnDefinition
在DDL阶段用于创建表,而不是在正常程序运行期间使用;可能您必须使用@DynamicInsert/@DynamicUpdate
:这个注释只插入(或更新)您在POJO中设置的属性,并让RDBMS管理其他字段一个小例子
这是DDL阶段生成的代码
我会做这个声明
我会做这个声明
如果用
@DynamicInsert
注释MyTable
,第一个示例将生成此语句正如您所见,字段
SourceFrom
的值没有指定,插入数据库表的值是由列定义默认值定义的(在本例中为'Case'
)手动处理默认值(在setter中,使用
@PrePersist
或其他解决方案)仍然有效