尽管设置了默认值,但仍会获得非空错误。

时间:2013-04-26 14:17:44

标签: spring hibernate

我有以下数据库列:

 `last_modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

在hibernate中使用以下映射:

@Temporal(TemporalType.TIMESTAMP)
@Column(name="last_modified", nullable=false, length=19)
public Date getLastModified() {
    return this.lastModified;
}

这已经好几个月了,但突然间我突然发现以下错误:

  

javax.persistence.PersistenceException:org.hibernate.PropertyValueException:not-null属性引用null或transient值:com.fs.model.BrowserHistory.lastModified

所以我想知道,为什么会突然发生这种情况?如果我将lastModified字段设置为可为空可以吗?

2 个答案:

答案 0 :(得分:0)

看起来您想要记录修改时间戳。要避免手动设置(或不设置它并获取错误),您可以使用生命周期回调:

@PrePersist
public void updateTimestamps() {
    lastModified = new Date();
}

答案 1 :(得分:0)

我发现数据库生成的列需要一些特定的注释:

@Column(name="last_modified", nullable=false, length=19, insertable=false, updatable=false)
@Generated(GenerationTime.ALWAYS)

我们现在正在尝试这个,但我认为它将解决这个问题。