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


