在我的SQL Server 2000数据库中,我有一个名为DATETIME
的lastTouched
类型的时间戳记(功能不属于数据类型),设置为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列。不知道这是否是解决此问题的最佳方法。欢迎反馈。