gpt4 book ai didi

java - Hibernate 默认 varchar 值 - Postgres

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:13:06 24 4
gpt4 key购买 nike

我有一个已与 Hibernate 映射的 Postgres 数据库,在我需要添加新属性之前一切正常。我添加了一个属性“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,因此该值将被保留。

  • 默认值作为字段的初始值:

    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。它为每个不插入空值的插入生成插入语句,因此使用数据库默认值。

关于java - Hibernate 默认 varchar 值 - Postgres,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24627996/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com