2016-12-02 82 views
0

我上课喜欢clazz中唯一约束与空列(休眠和PostgreSQL)

@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); 

,它允许插入重复myuniquecolumn删除时空值。

如何防止这种情况?

我想有非重复删除时为空。

回答

0

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

如果你想拥有的唯一索引,你必须提供该列的默认值删除列了解更多关于空值在SQL https://en.wikipedia.org/wiki/Null_(SQL)

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)。

+0

我想出了一个触发器功能,但是这个效果更好。 – coladict

+0

谢谢,它的工作原理 –