Я использую QueryDSL с JPA.
Я хочу запросить некоторые свойства объекта, это выглядит так:
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.
Затем я понял, что невозможно запросить их вместе в одном операторе SQL.
Возможно ли, что QueryDSL будет каким-то образом иметь дело с отношениями и генерировать дополнительные запросы (точно так же, как в hibernate с ленивыми отношениями) и загружать результаты в?
Или я должен просто запросить дважды, а затем объединить оба списка результатов?
P.S. что я на самом деле хочу, так это каждый пост с его комментариями. Так что лучше использовать функцию, чтобы объединить идентификаторы комментариев каждого поста, возможна ли такая экспрессия?
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)