私のSQL Server 2000データベースでは、lastTouched
という名前のタイプDATETIME
のタイムスタンプ(データ型ではない)カラムがデフォルト値/バインディングとしてgetdate()
に設定されています。データベースによって生成される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.
私は以前、これは純粋な休止状態で動作するようになったが、私はセンスがJPAに切り替えると、この列は、データベース側で生成されると仮定されていること、それを伝えるためにどのよう見当がつかないています。私はまだJPA永続性レイヤーとしてHibernateを使用しています。
あなたは、データベースを使用するように @Column(名前= "LastTouched" 偽=挿入可能、偽=更新可能) を追加することができますは、SQL UPDATE文でも、タイムスタンプを生成しました。 –
Juhaに感謝します。私はそれが後に道を邪魔したと確信しています。 –
実際、もっと考えてみると、更新時に列が必要になると思います。なぜなら、列の変更を行うときにJavaで更新する必要があるからです。何らかの形でデータベース側で列の更新を行う方法がない限り。 –