Hibernate 保存時に DB 側のデフォルト値を使用するにはどうすればよいでしょうか? 質問する

Hibernate 保存時に DB 側のデフォルト値を使用するにはどうすればよいでしょうか? 質問する

DB にデフォルト値が である列がありますsysdate。アプリ側の対応するプロパティに何も指定せずに、そのデフォルト値を挿入する方法を探しています。ちなみに、私はアノテーションベースの構成を使用しています。

何かアドバイス?

ベストアンサー1

日付列がdbms 側nullとして定義されているにもかかわらず、挿入時に値を取得する理由は、列の値がクエリで列に値が指定されていない場合にのみ使用されるためです。つまり、値が指定されている場合でも、文に出現してはいけません。default SYSDATEdefaultINSERT INTOnull

default SYSDATEDBMS側でを使用する場合は、 を@Column次のように設定する必要があります。insertable=falseSQL から列を取得しますINSERT

@Temporal(TemporalType.TIMESTAMP)
@Column(name = "myDate", insertable=false)
private Date myDate;

このアプローチでは、エンティティを作成するときにアプリのプロパティに指定した値が常に無視されることに注意してください。時々日付を指定できるようにしたい場合は、デフォルト値ではなく DB トリガーを使用して値を設定することを検討してください。

default SYSDATEDBMSの定義を使用する代わりに、@PrePersistそして@PreUpdateまだ割り当てられていない場合にのみ、保存/更新の前にプロパティに現在の日付を割り当てるための注釈:

@PrePersist
protected void onCreate() {
    if (myDate == null) { myDate = new Date(); }
}

この密接に関連する質問には、さまざまなアプローチが提供されます。Hibernate と MySQL の作成タイムスタンプと最終更新タイムスタンプ

おすすめ記事