如何使用Hibernate注解创建允许空值的唯一约束?

31 浏览
0 Comments

如何使用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列:

  1. 56000 --ok
  2. NULL --ok
  3. 34089 --ok
  4. NULL --ok
  5. 34089 --不允许
  6. 34567 --ok
0
0 Comments

在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值的问题。他打算通过编程的方式来处理这个业务逻辑。谢谢。

0