使用UPPER我有一个类标准API - 在ElementCollection
@Entity
public class Person{
...
@ElementCollection
private Set<String> tags;
...
}
我想使用JPA 2.0标准API搜索过这些标签 - 但在一个不区分大小写的方式。因此,我希望将搜索参数设置为UPPER,并将列设置为UPPER(伪SQL:从Person p连接标记中选择p。* t p.id = t.pId其中upper(t.name)= upper(' searchParameter');)
这里是不上我的代码的标签:
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“Column”?
换句话说,我希望写这个查询与标准API:
SELECT p FROM Person p JOIN p.tags t WHERE UPPER(t) = UPPER('searchString')
谢谢
这是行不通的。我没有“标签”类,我只有一组字符串。此外,isMember方法需要“Expression> paramExpression1”,builder.upper返回表达式。 –
Soccertrash
2012-04-17 13:56:26
有趣的情况。除了在getter上使用属性访问,我想不出任何其他方式,但它会是hacky。 – JMelnik 2012-04-17 15:22:25
我刚刚将解决方案作为评论添加到了我的问题中 – Soccertrash 2012-04-17 15:39:49