我有一堂课
@Entity
public class Person{
...
@ElementCollection
private Set<String> tags;
...
}
我想使用 JPA 2.0 Criteria API 来搜索这些标签——但不区分大小写。因此,我想将搜索参数设置为 UPPER 并将列设置为 UPPER (伪 SQL:select p.* from Person p join Tags t on p.id=t.pId where upper(t.name)=upper('搜索参数');)
这是我在标签上没有 UPPER 的代码:
CriteriaBuilder builder = this.em.getCriteriaBuilder();
CriteriaQuery<Person> query = builder.createQuery(Person.class);
Root<Person> root = query.from(Person.class);
return this.em.createQuery(query.select(root).where(
builder.isMember(builder.upper(builder.literal(searchTag)),
root.get(Person_.tags)))).getResultList();
其中 searchTag 是输入参数。
如何将 UPPER 分配给 Person_.tags “列”?
换句话说,我想用 Criteria API 编写这个查询:
SELECT p FROM Person p JOIN p.tags t WHERE UPPER(t) = UPPER('searchString')
谢谢