如何添加不区分大小写的JPA唯一约束?
我想向JPA实体添加一个不区分大小写的唯一约束 假设我们有一个实体员工,该员工需要对两列如何添加不区分大小写的JPA唯一约束?,jpa,case-insensitive,Jpa,Case Insensitive,我想向JPA实体添加一个不区分大小写的唯一约束 假设我们有一个实体员工,该员工需要对两列NAME和PROJECT\u TITLE具有唯一约束,其中NAME不区分大小写 当数据库中已经存在一行JoHn,PROJECT1时,插入JoHn,PROJECT1应该会导致唯一约束冲突,因为JoHn,JoHn与我们的情况相同 下面给出了满足上述要求的SQL ALTER TABLE employee ADD CONSTRAINT employee_name_unique UNIQUE(LOWER(NAM
NAME
和PROJECT\u TITLE
具有唯一约束,其中NAME
不区分大小写
当数据库中已经存在一行JoHn,PROJECT1
时,插入JoHn
,PROJECT1
应该会导致唯一约束冲突,因为JoHn
,JoHn
与我们的情况相同
下面给出了满足上述要求的SQL
ALTER TABLE employee ADD CONSTRAINT employee_name_unique
UNIQUE(LOWER(NAME),PROJECT_TITLE);
JPA不支持这种约束。对于纯JPA解决方案,您必须使用附加列。请看下面的答案:
SQL是这项工作的合适工具。使用它。我希望JPA支持不区分大小写的唯一性约束,并在此处提出功能请求:
@Entity Foo {
private value;
@Column(unique = true)
private valueLowercased;
@PrePersist @PreUpdate private prepare(){
this.valueLowercased = value == null ? null : value.toLowerCase();
}
}