DB にデフォルト値が である列がありますsysdate
。アプリ側の対応するプロパティに何も指定せずに、そのデフォルト値を挿入する方法を探しています。ちなみに、私はアノテーションベースの構成を使用しています。
何かアドバイス?
ベストアンサー1
日付列がdbms 側null
として定義されているにもかかわらず、挿入時に値を取得する理由は、列の値がクエリで列に値が指定されていない場合にのみ使用されるためです。つまり、値が指定されている場合でも、文に出現してはいけません。default SYSDATE
default
INSERT INTO
null
default SYSDATE
DBMS側でを使用する場合は、 を@Column
次のように設定する必要があります。insertable=false
SQL から列を取得しますINSERT
。
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "myDate", insertable=false)
private Date myDate;
このアプローチでは、エンティティを作成するときにアプリのプロパティに指定した値が常に無視されることに注意してください。時々日付を指定できるようにしたい場合は、デフォルト値ではなく DB トリガーを使用して値を設定することを検討してください。
default SYSDATE
DBMSの定義を使用する代わりに、@PrePersist
そして@PreUpdate
まだ割り当てられていない場合にのみ、保存/更新の前にプロパティに現在の日付を割り当てるための注釈:
@PrePersist
protected void onCreate() {
if (myDate == null) { myDate = new Date(); }
}
この密接に関連する質問には、さまざまなアプローチが提供されます。Hibernate と MySQL の作成タイムスタンプと最終更新タイムスタンプ。