如何使用Hibernate注解创建允许空值的唯一约束?
如何使用Hibernate注解创建允许空值的唯一约束?
我正在使用:Spring 4、Hibernate 4、SQL Server 2008
我知道如何在SQL Server 2008中实现这个要求,参考自这个问题的回答How do I create a unique constraint that also allows nulls?
但是,由于在创建表时我没有生成任何手动的SQL代码,所以是否可以通过Hibernate注解在我的实体类中生成一个“where子句”来实现约束条件?
我的DDL是从Java实体定义中从头创建的,如下所示:
@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) //显式可为空 public String getCodecnbv() { return codecnbv; } @Column(name="zipcode", nullable=true, length=5) //显式可为空 public String getZipcode() { return zipcode; }
}
然而,当我添加数据并尝试在codecnbv和/或zipcode列中插入第二条记录时,我会收到一个违反唯一约束的异常。
我所需求的要求是允许多个null值,并且当值不为null时,应该具有唯一值,即:
对于zipcode列:
- 56000 --ok
- NULL --ok
- 34089 --ok
- NULL --ok
- 34089 --不允许
- 34567 --ok
在SQL Server中,NULL
被视为一个值,并且不允许有第二个NULL
值。这不是Hibernate的问题,而是SQL Server的问题。
有一些链接可以参考:
How do I create a unique constraint that also allows nulls?
https://sqlmag.com/database-development/multiple-nulls-unique-constraints
另一个链接:stackoverflow.com/questions/1796414/…
SJuan76 理解了在SQL Server中关于NULL值的问题。他打算通过编程的方式来处理这个业务逻辑。谢谢。