JPAでQueryDSLを使用しています。QueryDSL:リレーションとプロパティのクエリ
私は、エンティティのいくつかのプロパティを照会したい、それはこのようなものだ:
QPost post = QPost.post;
JPAQuery q = new JPAQuery(em);
List<Object[]> rows = q.from(post).where(...).list(post.id, post.name);
それは正常に動作します。
リレーションプロパティを照会する場合は、投稿のコメント:
List<Set<Comment>> rows = q.from(post).where(...).list(post.comments);
いいですね。
しかし、リレーションと簡単なプロパティを一緒にクエリしたいとします。
List<Object[]> rows = q.from(post).where(...).list(post.id, post.name, post.comments);
次に、間違ったSQL構文が生成されました。
次に、1つのSQLステートメントでそれらを一緒に照会することができないことに気付きました。
QueryDSLがリレーションを扱い、追加のクエリを生成する可能性はありますか(ちょうどhibernateがレイジーリレーションと同じように)?
2回クエリしてから両方の結果リストをマージする必要がありますか?
P.S.私が実際に望んでいるのは、それぞれの投稿のコメントIDです。だから、各投稿のコメントIDを連結する関数が優れています。この種の表現は可能ですか?
q.list(post.id, post.name, post.comments.all().id.join())
とサブクエリのSQLを生成(select group_concat(c.id) from comments as c inner join post where c.id = post.id)
お返事ありがとうございます。私はかなりそれを取得しない... SQLメソッドでは、私はQueryDSL SQLでサブクエリを呼び出すことができますか?後者の場合、リストのcommentIds(数式付き)という別のプロパティを持つ必要がありますか? –
Querydsl SQLでサブクエリを使用できます。あなたの2番目の質問については、いいえ、通常のプロパティだけですが、lazilyフェッチされたアノテーション付きプロパティでは、オブジェクト全体をフェッチせずにidプロパティにアクセスできます。 –
ありがとう!以前はアクセサーアノテーションの効果についてはわかりませんでした。私はそれを調べます:) –