質問

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top