Xav*_*ica 88
null即使将其定义为default SYSDATEdbms-side,date列在插入时获取值的原因是,default只有在查询中未给出列时才使用列的值.这意味着它必须不会出现在INSERT INTO句子中,即使已经给出了null.
如果要default SYSDATE在DBMS端使用,则应配置@Columnwith insertable=false以便从SQL中获取列INSERT.
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "myDate", insertable=false)
private Date myDate;
Run Code Online (Sandbox Code Playgroud)
请注意,在创建实体时,此方法始终会忽略您在应用中为属性提供的值.如果您确实希望能够有时提供日期,也许您应该考虑使用数据库触发器来设置值而不是默认值.
有一种替代方法可以使用default SYSDATEDBMS 的定义.当且仅当尚未分配时,您可以使用@PrePersist和@PreUpdate注释在保存/更新之前将当前日期分配给属性:
@PrePersist
protected void onCreate() {
if (myDate == null) { myDate = new Date(); }
}
Run Code Online (Sandbox Code Playgroud)
这个密切相关的问题提供了不同的方法:使用Hibernate和MySQL创建时间戳和上次更新时间戳.
raj*_*lli 18
如果您正在使用Hibernate,那么您可以使用@CreationTimestamp插入默认日期.
@CreationTimestamp
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "create_date")
private Date createDate;
Run Code Online (Sandbox Code Playgroud)
并@UpdateTimestamp在必要时更新值
@UpdateTimestamp
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "modify_date")
private Date modifyDate;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
45322 次 |
| 最近记录: |