微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java-Hibernate默认varchar值-Postgres

我有一个已经用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 举报,一经查实,本站将立刻删除。

相关推荐