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

时间:2014-03-03 19:13:18

标签: java sql-server hibernate

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

我知道如何使用SQL Server 2008从此问题响应How do I create a unique constraint that also allows nulls?

中执行此操作

但是由于我在创建表时没有生成任何手动SQL代码,是否可以通过我的Entity类中的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) //explicitly nullable
public String getCodecnbv() {
    return codecnbv;
}

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

}

但是,只要我添加数据并尝试在列codecnbv和/或zipcode中输入NULL的第二条记录,我就会收到一个异常,说我违反了唯一约束。

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

对于zipcode列

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

1 个答案:

答案 0 :(得分:0)

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

一些链接:

How do I create a unique constraint that also allows nulls?

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