我有一个已经用Hibernate映射的Postgres数据库,并且一切正常,直到需要添加新属性为止.
我添加了一个属性“ ROLE”,该属性必须不为空,并且默认情况下具有值“ 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属性引用了null或瞬态值
我已经尝试了一切,但是没有运气.
有人可以帮忙吗?
谢谢.
解决方法:
否则它将被设置为null,因为this.role在保存期间将为null,因此该值将被保留.
>默认值作为字段的初始值:
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,否则只需设置默认值就可以了.
>您可以使用Hibernates动态更新语句dynamic-update = true和dynamic-insert = true.它为每个不插入空值的插入生成插入语句,因此使用数据库默认值.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。