我在DB中有一列,默認值爲sysdate
。我正在尋找一種方法來獲得插入的默認值,而我沒有給任何應用程序端的相應屬性。順便說一下,我使用基於註釋的配置。如何在使用Hibernate保存時使用DB端默認值?
有什麼建議嗎?
我在DB中有一列,默認值爲sysdate
。我正在尋找一種方法來獲得插入的默認值,而我沒有給任何應用程序端的相應屬性。順便說一下,我使用基於註釋的配置。如何在使用Hibernate保存時使用DB端默認值?
有什麼建議嗎?
插入日期列時得到null
值的原因(即使它被定義爲default SYSDATE
dbms端)是因爲列的default
值僅在查詢中未給定列時使用。這意味着它不得出現在INSERT INTO
句子中,即使它已被授予null
。
如果你想在DBMS側使用default SYSDATE
,你應該爲了得到列出你的SQL INSERT
S的配置@Column
與insertable=false
。
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "myDate", insertable=false)
private Date myDate;
考慮到這種方法將始終忽略您在創建實體時嚮應用中的屬性提供的值。如果您確實希望能夠提供日期,也許您應該考慮使用數據庫觸發器來設置值而不是默認值。
還有一種方法可以使用DBMS的default SYSDATE
定義。您可以使用@PrePersist
和@PreUpdate
註解當前日期分配給屬性,之前保存/更新,當且僅當它尚未分配:
@PrePersist
protected void onCreate() {
if (myDate == null) { myDate = new Date(); }
}
此密切相關的問題提供了不同的方法:Creation timestamp and last update timestamp with Hibernate and MySQL 。
只要把插入你=假 @column定義
看到這個link以獲取更多信息
如果您正在使用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;
感謝非常詳細的解釋哈維。這超出了我的期望,它確實有效! – BruceCui
@ user1900240很高興幫助:) –
insertable = false對我不起作用。我正在使用Postgres,並且在列上設置了一個默認值,但它的值爲null。 –