0

我有以下数据库列:

 `last_modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

在休眠中使用以下映射:

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

这几个月来一直运行良好,但突然间我收到以下错误:

javax.persistence.PersistenceException:org.hibernate.PropertyValueException:非空属性引用空值或瞬态值:com.fs.model.BrowserHistory.lastModified

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

4

2 回答 2

0

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

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

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

于 2013-04-26T21:18:32.557 回答
0

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

@PrePersist
public void updateTimestamps() {
    lastModified = new Date();
}
于 2013-04-26T14:39:16.507 回答