空列的唯一约束(Hibernate,PostgreSQL)

时间:2016-12-02 12:39:36

标签: spring postgresql hibernate jpa unique

我有像Clazz这样的课程

    @Table(
    name="tablename", 
    uniqueConstraints=
        @UniqueConstraint(
                          name= "uniqueColumn_deleted_uk",
                          columnNames={"myuniquecolumn", "deleted"}
                         )

    )
 public class Clazz {

     @Column(name = "deleted")
     private LocalDateTime deleted;
}

删除可以为空,PosgreSQL创建唯一索引,如

CREATE UNIQUE INDEX uniqueColumn_date_uk ON public.tablename (short_code_3, deleted);

,当删除为NULL时,它允许插入重复的myuniquecolumn。

如何防止这种情况?

我希望删除时为非重复项。

2 个答案:

答案 0 :(得分:1)

您应该创建两个部分唯一索引

create unique index on public.tablename (short_code_3, deleted) where deleted is not null;
create unique index on public.tablename (short_code_3) where deleted is null;

(我不知道如何在你的ORM中做到这一点。)

答案 1 :(得分:0)

这是不可能的,因为null永远不会为null。

阅读有关SQL https://en.wikipedia.org/wiki/Null_(SQL)

中空值的更多信息

如果要在唯一索引中包含已删除的列,则必须为该列提供默认值。