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