JPAで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 がどうにかして関係を処理し、追加のクエリを生成して (休止状態が遅延関係で行うのと同じように)、結果をロードすることは可能ですか?
それとも、2 回クエリを実行してから、両方の結果リストをマージする必要がありますか?
PS私が実際に欲しいのは、コメントの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)