不同的結果,這似乎是一個衆所周知的問題,多年如可以在這裏讀到: http://blog.xebia.com/2008/12/11/sorting-and-pagination-with-hibernate-criteria-how-it-can-go-wrong-with-joins/休眠 - 與分頁
即使發現處於休眠常見問題解答參考:
這有也已在前面討論過SO
How to get distinct results in hibernate with joins and row-based limiting (paging)?
問題在於,即使經歷了所有這些資源之後,我仍然無法解決我的問題,這似乎與此標準問題有點不同,儘管我不確定。
這裏提出的標準解決方案涉及創建兩個查詢,第一個用於獲取不同的ID,然後使用更高級查詢中的查詢來獲得所需的分頁。在我的情況Hibernate類是像
A
- aId
- Set<B>
B
- bId
在我看來,子查詢似乎工作對我罰款,並能夠得到鮮明的艾滋病,這是應該做的分頁外部查詢再次獲取重複項,因此子查詢中的區別不起作用。
假設我有一個具有一組四個乙對象的對象,我的分析是因爲引入組的,雖然提取數據爲
session.createCriteria(A.class).list();
休眠被填充在列表指向四個引用中只是一個對象。正因爲如此,標準解決方案對我來說是失敗的。
有人可以幫忙想出一個解決方案,這種情況下?
編輯:我決定自己從不同的結果集中做分頁。其他同樣糟糕的方式可以一直延遲加載在B對象,但這樣做需要所有A對象單獨的查詢來獲取相應的B對象
我也在子查詢中使用過。我的子查詢工作正常,並返回唯一的ID。問題是外部查詢正在獲取重複項。例如,如果子查詢返回A.ids = 1,2,3,那麼主查詢(用於分頁)將獲取重複的A.id,如1,1,1,2,2,3,3,3,因此表單完整查詢Select A. * from A where A.id in(subquery)limit 10;無法讓我唯一A記錄 – Ashish 2012-02-24 04:28:42
您的最終查詢應該如下所示:select a。* from a where a.id in(:ids),並且查詢以獲取A的標識符應如下所示:select a.id from A限制爲10.因此,僅將限制僅應用於標識符而不應用於最終查詢。 – szhem 2012-02-24 07:08:01
我的最後一個查詢的形式是從a.id = b.aid的左外部連接b中選擇a。*,並且需要具有完整的A對象。 – Ashish 2012-02-24 10:12:36