繁体   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