如何添加不区分大小写的 JPA 唯一约束?

man*_*rma 2 jpa case-insensitive

我想向 JPA 实体添加不区分大小写的唯一约束。

假设我们有一个实体员工,需要对两列有唯一约束NAME,并且不区分大小写PROJECT_TITLENAME

当数据库中已存在行时,插入JoHn,PROJECT1应该会导致唯一约束冲突,因为,在我们的例子中是相同的。JOHN,PROJECT1JOHNJoHn

下面给出了满足上述需求的SQL

ALTER TABLE employee ADD CONSTRAINT employee_name_unique
    UNIQUE(LOWER(NAME),PROJECT_TITLE);
Run Code Online (Sandbox Code Playgroud)

Ond*_*žka 5

JPA 不支持这种约束。对于纯 JPA 解决方案,您必须使用额外的列。请参阅此处的答案:不区分大小写的 JPA 唯一约束?

@Entity Foo { 
    private value;
    @Column(unique = true)
    private valueLowercased;

    @PrePersist @PreUpdate private prepare(){
        this.valueLowercased = value == null ? null : value.toLowerCase();
    }
}
Run Code Online (Sandbox Code Playgroud)