![](/img/trans.png)
[英]Hibernate mapping between Postgres array of varchar and a Java/Kotlin collection of enum
[英]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,則可能需要使用@PrePersist
或UserType
,否則只需設置默認值即可。
dynamic-update=true
和dynamic-insert=true
。 它為每個不插入空值的插入生成插入語句,因此使用DB默認值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.