将JPA的时间戳列设置为由数据库生成?

90
在我的SQL Server 2000数据库中,我有一个时间戳列(不是数据类型而是函数)的类型为DATETIME,名称为lastTouched,默认值/绑定设置为getdate()
我正在使用Netbeans 6.5生成的JPA实体类,并在我的代码中引用它。
@Basic(optional = false)
@Column(name = "LastTouched")
@Temporal(TemporalType.TIMESTAMP)
private Date lastTouched;

然而,当我尝试将该对象存入数据库时,我会收到以下错误:

javax.persistence.PersistenceException: org.hibernate.PropertyValueException: not-null property references a null or transient value: com.generic.Stuff.lastTouched

我尝试将@Basic设置为(optional = true),但这会抛出一个异常,说数据库不允许null值用于TIMESTAMP列,这是按设计来的。

ERROR JDBCExceptionReporter - Cannot insert the value NULL into column 'LastTouched', table 'DatabaseName.dbo.Stuff'; column does not allow nulls. INSERT fails.

我之前在纯Hibernate中成功实现了这个功能,但是我现在已经转到JPA,不知道如何告诉它这一列应该由数据库端生成。请注意,我仍然将Hibernate作为我的JPA持久层。

12个回答

0
@Column(name = "LastTouched", insertable = false, updatable = false, columnDefinition = "TIMESTAMP default getdate()")
@Temporal(TemporalType.TIMESTAMP)
private Date LastTouched;`enter code here`

-1
这对我有用:
@Column(name = "transactionCreatedDate", nullable = false, updatable = false, insertable = false, columnDefinition = "TIMESTAMP DEFAULT CURRENT_TIMESTAMP")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接