使用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