我在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語法。
然後我意識到無法在一個SQL語句中一起查詢它們。
QueryDSL是否有可能以某種方式處理關係並生成其他查詢(就像hibernate對懶惰關係所做的一樣),並將結果加載到?
或者我應該只查詢兩次,然後合併兩個結果列表?
P.S.我真正想要的是每個帖子都有它的評論ID。所以一個函數來連接每個帖子的評論id更好,這種expressin可能嗎?
q.list(post.id, post.name, post.comments.all().id.join())
,併產生像(select group_concat(c.id) from comments as c inner join post where c.id = post.id)
感謝您的答案。我不太明白,儘管......在SQL方法中,你的意思是我可以在QueryDSL SQL中調用子查詢嗎?在後一種情況下,你的意思是我應該有一個列表 commentIds(帶有公式)的單獨屬性? –
對於Querydsl SQL,您可以使用子查詢。關於你的第二個問題,不,只是普通的屬性,但懶惰地提取,帶有註釋的屬性,你可以訪問id屬性,但不需要獲取整個對象。 –
謝謝!我以前不知道accessor註釋的效果。我會研究一下:) –