私はこれらのタグを検索するJPA 2.0クライテリアAPIを使用したいクラスクライテリアAPI - UPPERを使用してElementCollection
@Entity
public class Person{
...
@ElementCollection
private Set<String> tags;
...
}
を持っている - しかし、大文字小文字を区別しない方法インチこのように、検索パラメータをUPPERに、カラムをUPPERに設定したい(Pseudo-SQL:Person pのselect p。*からp.id = t.pId上のタグtを選択する)upper(t.name)= upper( ' searchParameter ');ここで)
は、タグのUPPERせずに私のコードです:
searchTagは、入力パラメータである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();
。
Person_.tags「列」にどのようにUPPERを割り当てることができますか?
言い換えれば、私は基準APIでこのクエリを書きたい:
SELECT p FROM Person p JOIN p.tags t WHERE UPPER(t) = UPPER('searchString')
はあなたが人からの参加タグの上限とリテラルのプロパティ名を呼び出す必要があなたに
これは機能しません。私はクラス "タグ"を持っていない、私は唯一の文字列のセットを持っています。さらに、isMemberメソッドは "Expression> paramExpression1"を予期し、builder.upperは式を返します。 –
Soccertrash
興味深い状況。ゲッターでプロパティアクセスを使う以外の方法は考えられませんが、それはハッキリです。 – JMelnik
私はちょうどコメントとして私の質問にソリューションを追加しました – Soccertrash