在我的SQL Server 2000数据库中,我有一个名为DATETIMElastTouched类型的时间戳记(功能不属于数据类型),设置为getdate()作为其默认值/绑定(bind)。

我正在使用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持久层。

最佳答案

我通过将代码更改为来解决此问题

@Basic(optional = false)
@Column(name = "LastTouched", insertable = false, updatable = false)
@Temporal(TemporalType.TIMESTAMP)
private Date lastTouched;

因此,在生成SQL插入时,将忽略timestamp列。不知道这是否是解决此问题的最佳方法。欢迎反馈。

10-02 04:18
查看更多