51

DB に、デフォルト値が の列がありますsysdate。アプリ側で対応するプロパティに何も与えていないときに、そのデフォルト値を挿入する方法を探しています。ところで、私は注釈ベースの構成を使用しています。

何かアドバイス?

4

3 に答える 3

114

日付列がdbms-sidenullとして定義されていても、挿入時に値を取得する理由は、列の値は、クエリで列に値が指定されていない場合にのみ使用されるためです。つまり、たとえ与えられたとしても、それが文に現れてはならないということです。default SYSDATEdefaultINSERT INTOnull

default SYSDATEDBMS側でを使用する場合は、SQLから列を取得するために@Columnwithを構成する必要があります。insertable=falseINSERT

@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を使用した作成タイムスタンプと最終更新タイムスタンプです。

于 2013-02-05T09:12:43.943 に答える
21

Hibernate を使用している場合は、@CreationTimestampデフォルトの日付を挿入するために使用できます。

@CreationTimestamp
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "create_date")
private Date createDate;

必要に@UpdateTimestamp応じて値を更新する

@UpdateTimestamp
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "modify_date")
private Date modifyDate;
于 2017-04-19T11:14:23.330 に答える
0

Or you can initialize the property of the POJO directly e.g:

//java code property declaration

private String surname = "default";
于 2013-06-26T09:21:25.410 に答える