一尘不染

使用Hibernate save时如何使用数据库端默认值?

hibernate

我在数据库中有一列,默认值为sysdate。我正在寻找一种方法来插入该默认值,而我并未向应用程序端的相应属性提供任何东西。顺便说一句,我正在使用基于注释的配置。

有什么建议吗?


阅读 519

收藏
2020-06-20

共1个答案

一尘不染

null即使将date列定义为default SYSDATEdbms端,date列在插入时仍会得到值的原因是,default仅当在查询中未为该列提供值时,才使用该列的值。这意味着INSERT INTO即使已经给出了它也不能出现在句子中null

如果要default SYSDATE在DBMS端使用,则应配置@Columnwith
insertable=false,以使列脱离SQL
INSERT

@Temporal(TemporalType.TIMESTAMP)
@Column(name = "myDate", insertable=false)
private Date myDate;

考虑到这种方法在创建实体时将始终忽略您提供给应用程序中属性的值。如果您确实确实希望有时提供日期,那么也许应该考虑使用数据库触发器来设置值而不是默认值。

除了使用default SYSDATEDBMS
的定义外,还有一种选择。当且仅当尚未分配日期时,才可以使用@PrePersist@PreUpdate注释在保存/更新之前将当前日期分配给属性:

@PrePersist
protected void onCreate() {
    if (myDate == null) { myDate = new Date(); }
}
2020-06-20