Criteria API を使用した動的 JPA 2.0 クエリ
-
22-09-2019 - |
質問
JPA 2.0のCriteriaBuilderを使用して動的クエリを構築するのに少し行き詰まっています。
かなり一般的なユースケースがあると思います:ユーザーは、任意の量の検索パラメータ X を指定および/または連結します。のように :
select e from Foo where (name = X1 or name = X2 .. or name = Xn )
CriteriaBuilder のメソッドまたはメソッドは動的ではありません。
述語 or(述語...制限)
アイデアは?サンプル?
解決
あなたの場合、私はむしろ使用したいと思います Expression#in(Collection)
ループを避けてコンパウンドを構築するため Predicate
動的に:
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Foo> cq = cb.createQuery(Foo.class);
Metamodel m = em.getMetamodel();
EntityType<Foo> Foo_ = m.entity(Foo.class);
Root<Foo> foo = cq.from(Foo_);
cq.where(my.get(Foo_.name).in(params));
チェックしてみてはいかがでしょうか Criteria API と Metamodel API を使用した基本的なタイプセーフ クエリ 詳細については。
他のヒント
は、このコードではFoo_.nameは、コンパイルエラーを与えるために起こっています。フィールドとしてその中で宣言されていません。私はこれを理解することはできませんよ。私を提案してください。
-raghu
所属していません StackOverflow