我正在使用: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列
答案 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