簡體   English   中英

Hibernate默認varchar值 - Postgres

[英]Hibernate default varchar value - Postgres

我有一個Postgres數據庫,我用Hibernate映射,一切正常,直到我需要添加一個新屬性。 我添加了一個屬性“ROLE”,它必須不為null,默認值為“USER”。 在Postgres我有ROLE VARCHAR(60) NOT NULL DEFAULT 'USER'我相信是正確的,我也有

@Column(name = "role", length = 60, nullable = false, columnDefinition = "varchar(60) default 'USER'")
public String getRole() {
    return this.role;
}

問題是,當我嘗試在我的數據庫中創建一個新條目時,它失敗了 - not-null property references a null or transient value

我已經嘗試了一切但沒有運氣......從我讀到的,我所擁有的應該是有效的。 有人可以幫忙嗎?

謝謝。

對於大多數情況,只要將角色設置為默認值即可。

否則它將被設置為null因為在保存期間this.role將為null ,因此該值將保持this.role

  • 默認值作為字段的初始值:

     private String role = "USER"; 
  • 使用org.hibernate.usertype.UserType並在保存期間覆蓋null

     @Override public void nullSafeSet(PreparedStatement st, Object value, int index, SessionImplementor session) throws HibernateException, SQLException { if (value == null) st.setString(index, "ROLE"); else st.setString(index, s); } 
  • 使用@PrePersist@PreUpdate方法並使用以下方法設置默認值:

     if (this.role == null) { this.role = "USER"; } 

如果從外部將對象設置為null,如反序列化的JSON或XML,則可能需要使用@PrePersistUserType ,否則只需設置默認值即可。

  • 您可以使用Hibernates動態更新語句dynamic-update=truedynamic-insert=true 它為每個不插入空值的插入生成插入語句,因此使用DB默認值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM