クラスがあります
@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(' searchParameter'); )
タグに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')
ありがとうございました