当前位置: 首页 > 知识库问答 >
问题:

我如何创建一个唯一的约束,允许NULL值与Hibernate注释?

太叔逸春
2023-03-14

我正在使用:Spring 4、Hibernate 4、SQL Server 2008

@Entity
@Table(name="Neighborhood", 
uniqueConstraints = {@UniqueConstraint(columnNames = {"codecnbv","zipcode"})})
@JsonSerialize(include = JsonSerialize.Inclusion.NON_EMPTY)
public class Neighborhood implements Serializable {

private String id;
private String codecnbv;
private String zipcode;

@Id 
@Column(name="id", nullable=false, unique=true, length=2)
public String getId() {
    return this.id;
}

@Column(name="codecnbv", nullable=true, length=12) //explicitly nullable
public String getCodecnbv() {
    return codecnbv;
}

@Column(name="zipcode", nullable=true, length=5) //explicitly nullable
public String getZipcode() {
    return zipcode;
}

}

但是,当我添加数据并尝试在列codecnbv和/或zipcode中输入第二个带有NULL的记录时,我会收到一个异常,说明我违反了unique约束。

我的要求是我必须允许多个空值,并且当值不是空值时,我应该有唯一的值,即。

  1. 56000--确定
  2. 空--确定
  3. 34089--确定
  4. 空--确定
  5. 34089--不允许
  6. 34567--确定

共有1个答案

左丘智渊
2023-03-14

这不是Hibernate的问题,而是SQL Server的问题,它认为null是一个值,并且不允许第二个null值。邪恶,我知道。

部分链接:

我如何创建一个也允许Null的唯一约束?

http://sqlmag.com/database-development/multiple-nulls-unique-constraints

 类似资料:
  • 我有一个使用Hibernate访问数据库的应用程序。它会抛出如下错误: 组织Spring框架清洁工厂。BeanCreationException:创建URL[文件:/C:/Program Files(x86)/XXX/applicationContext.xml]中定义的名为“sessionFactory”的bean时出错:初始化方法调用失败;嵌套异常是org.hibernate。Annotati

  • 我在数据库中有Consumer表,其中Consumer_type列上有check约束,如下所示: 现在,从hibernate方面,我想添加check约束注释,该注释只允许消费者类型表中的“ACCOUNT”和“ORGANIZATION”值。 为此,我应该使用哪个hibernate/jpa注释?

  • 问题内容: 我有一个存储产品代码的字段。该代码是唯一的,但是某些产品根本没有代码。我无法发明代码,因为它们是提供商代码。 在MySQL中这种约束可能吗? 我是一个存储过程和触发器的菜鸟,所以如果解决方案涉及其中之一,请耐心等待。 更新:列不为空。这就是为什么我无法做到这一点。 问题答案: 是的,您可以这样做。参见MySQL参考(版本5.5)。 UNIQUE索引会创建约束,以使索引中的所有值都必须不

  • 问题内容: 我是第一次使用oracle,我有一个名为ExpenseReport的表,该表存储有关费用的详细信息。 我希望Null允许ApprUserNo,如果ERStatus =’PENDING’,将不胜感激,我一直在努力整理整个上午 问题答案: 您需要重新形成约束。 首先,如果您希望一个字段保留空值,而不考虑其他任何规则,则该字段必须为可空字段。 其次,创建一个约束,说ApprUserNo不能为

  • 我有一个Postgres表,在多个列上有一个唯一的约束,其中一个可以为NULL。对于每个组合,我只希望允许该列中有一条空记录。 我有一个upsert查询,当它遇到col2、col3中具有相同值的记录时,我想更新col4: 但是当col3为空时,冲突不会触发。我读过关于使用触发器的文章。请问让冲突触发的最佳解决方案是什么?

  • 以下两者之间有区别吗: 以及: 在这两种情况下,名称是否唯一?索引唯一时意味着什么? 编辑:Postgres是唯一的约束,而索引没有回答我的问题。它考虑了FK的情况。我的问题与FK无关。我只想知道在这个例子中,这两个操作是否等价,其中不涉及FK。