Java 我如何创建一个允许Hibernate注释为空值的唯一约束?
我正在使用:Spring4、Hibernate4、SQLServer2008 通过这个问题的回答,我知道如何使用SQL Server 2008 但是,由于我在创建表的过程中没有生成任何手动SQL代码,所以可以通过实体类中的Hibernate注释在约束中生成“where子句”吗 我的DDL是使用java实体定义从头创建的,如下所示:Java 我如何创建一个允许Hibernate注释为空值的唯一约束?,java,sql-server,hibernate,Java,Sql Server,Hibernate,我正在使用:Spring4、Hibernate4、SQLServer2008 通过这个问题的回答,我知道如何使用SQL Server 2008 但是,由于我在创建表的过程中没有生成任何手动SQL代码,所以可以通过实体类中的Hibernate注释在约束中生成“where子句”吗 我的DDL是使用java实体定义从头创建的,如下所示: @Entity @Table(name="Neighborhood", uniqueConstraints = {@UniqueConstraint(columnN
@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列
这不是Hibernate的问题,而是SQL Server的问题,它将
NULL
视为一个值,不允许第二个NULL
值。邪恶,我知道
一些链接:
请检查实体表上实际设置了什么样的约束。运行
show create table\u table\u name
一个唯一的约束将允许一个空值。如果它允许您使用多个null值,那么它将不会是唯一的:)@M.Ali我认为null不会违反唯一约束。让A通过FK与B相关,关系是一对一,但不是强制性的。你的假设会阻止这样的事情发生constraints@M.Ali老论点null
表示没有值,因此对其应用unique
的限制没有意义。一般来说,我喜欢SQL Server,但这是一个重大错误。@M.Ali如果它被认为是一个未知值,那么它更应该被认为是一个不唯一的值。MySQL对此的处理更为正确:“唯一索引创建了一个约束,使得索引中的所有值都必须是不同的。如果您尝试添加一个具有与现有行匹配的键值的新行,则会发生错误。对于所有引擎,唯一索引允许包含NULL的列具有多个NULL值。”另一个链接:SJuan76我看到了SQLServer中关于空值的观点。我想我必须通过编程来管理这个业务逻辑。谢谢