私の 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 に切り替えましたが、この列がデータベース側で生成されることになっていることを伝える方法がわかりません。JPA永続レイヤーとしてHibernateをまだ使用していることに注意してください。