使用Hibernate save时如何使用数据库端默认值?
我在数据库中有一列,默认值为sysdate
。我正在寻找一种方法来插入该默认值,而我并未向应用程序端的相应属性提供任何东西。顺便说一句,我正在使用基于注释的配置。
有什么建议吗?
回答:
null
即使将date列定义为default
SYSDATEdbms端,date列在插入时仍会得到值的原因是,default
仅当在查询中未为该列提供值时,才使用该列的值。这意味着INSERT
INTO即使已经给出了它也不能出现在句子中null
。
如果要default SYSDATE
在DBMS端使用,则应配置@Column
with
insertable=false
,以使列脱离SQL
INSERT
。
@Temporal(TemporalType.TIMESTAMP)@Column(name = "myDate", insertable=false)
private Date myDate;
考虑到这种方法在创建实体时将始终忽略您提供给应用程序中属性的值。如果您确实确实希望有时提供日期,那么也许应该考虑使用数据库触发器来设置值而不是默认值。
除了使用default SYSDATE
DBMS
的定义外,还有一种选择。当且仅当尚未分配日期时,才可以使用@PrePersist
和@PreUpdate
注释在保存/更新之前将当前日期分配给属性:
@PrePersistprotected void onCreate() {
if (myDate == null) { myDate = new Date(); }
}
以上是 使用Hibernate save时如何使用数据库端默认值? 的全部内容, 来源链接: utcz.com/qa/416909.html