9

JPA 2.0 の CriteriaBuilder を使用して動的クエリを作成するのに少し手こずっています。

私が推測する非常に一般的なユースケースがあります。ユーザーは、任意の量の検索パラメーター X を指定します。

select e from Foo where (name = X1 or name = X2 .. or name = Xn )

CriteriaBuilder の Method または は動的ではありません。

Predicate or(Predicate... 制限)

アイデア?サンプル?

4

2 に答える 2

7

あなたの場合、ループを避けて動的に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));

詳細については、基準 API およびメタモデル API を使用した基本的なタイプ セーフなクエリを参照してください。

于 2010-03-25T12:09:36.067 に答える
1

このコードの Foo_.name はコンパイル エラーになります。フィールドはその中で宣言されていないため。私はこれを理解することができません。私に提案してください。

-ラグー

于 2010-08-03T08:07:50.367 に答える