5

QueryDSL ライブラリのcom.mysema.query.types.expr.SimpleExpression<T>クラスにはSimpleExpression.in(CollectionExpression<?, ? extends T>)、コレクションを返す式を受け取るメソッドがあります。しかし、タイプ のオブジェクトを作成する方法が見つかりませんcom.mysema.query.types.CollectionExpression<?, ? extends T>

私のクエリ式は次のようになります。

QEvent.event.organization.in(expression)

私はのexpressionようなものにしたい場所:

QOrganization.organization.country.in("India", "USA")

しかし、2 番目の式は型com.mysema.query.types.expr.BooleanExpressionであり、それを に変換する方法を見つけることができませんcom.mysema.query.types.CollectionExpression<?, ? extends T>

QueryDSL API ドキュメントを調べましたが、関連するものが見つかりませんでした。

4

2 に答える 2

12

java.lang.Boolean を java.util.Collection に変換できないのと同じ理由で、BooleanExpression を CollectionExpression に変換することはできません。互換性がありません。

次の表現はあなたにとって何を意味しますか

QEvent.event.organization.in( 
    QOrganization.organization.country.in("India", "USA"))

このような表現を試みてみませんか?

QEvent event = QEvent.event;
QOrganization organization = QOrganization.organization;
query.from(event)
    .innerJoin(event.organization, organization)
    .where(organization.country.in("India", "USA"))
    .list(event);

またはより単純な

QEvent event = QEvent.event;
query.from(event)
    .where(event.organization.country.in("India", "USA"))
    .list(event);

あなたが記述しようとしたのは、サブクエリを使用した式だったと思います。このようなもの

query.from(event)
    .where(event.organization.in( subQuery().from(organization)
        .where(organization.country.in("India", "USA")))
    .list(event);

subQuery() の実装は、Querydsl バックエンド固有です。結合を使用すると、一致する各イベント (組織の組み合わせ) の行が取得され、サブクエリを使用すると、特定の制約を満たす組織を持つ一意のイベントが取得されます。

結合とサブクエリのパフォーマンスの違いは実装固有です。

どの Querydsl バックエンドを使用していますか? JPA、SQL、または何か他のもの?

于 2011-08-18T19:47:59.417 に答える
1

とにかく、DB側では意味がありません。

サブクエリを使用する必要があります

于 2011-08-18T13:32:09.020 に答える