我有像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。
如何防止这种情况?
我希望删除时为非重复项。
答案 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)
中空值的更多信息如果要在唯一索引中包含已删除的列,则必须为该列提供默认值。