2013-10-24 20 views
2

我想有多個表後的分頁加入標準。分頁問題,​​而在休眠標準加入

的問題是:

當我加入表產生的重複記錄。 適用於記錄集的分頁(帶有重複)。

我使用這個criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);刪除重複的記錄。

例如: 通常我將去除重複之後,得到了10條記錄。 當我設置我的開始索引爲1,結束索引爲5時,我應該得到5條記錄,但它返回2或3(大約)。這取決於加入。

請幫我一把。

回答

1

的這裏的問題是beeing應用的兩種不同的技術。

  • 首先在DB服務器上正確應用了分頁。它將返回預定的行數(例如5)。
  • 第二部分是應用程序部分,其中Hibernate確實從這5個記錄中選擇了DISTINCT值。

所以,如果實際上有2行加1加另一個,轉換將導致3個對象。

正確的(也許是最好的)的方式,如何避免這一點,是不使用集合的提取。如果我們需要收集來顯示,我們應該(例如,使用批量大小,以減少選擇的數量)

如果我們需要收集被用作過濾器懶洋洋地加載它,我們應該把它轉化爲subquery,並再次執行根實體的分頁,以取代IN(子查詢)子句

想象一下,父表:

ParentId, Code 
1  , 'P1' 
2  , 'P2' 
3  , 'P3' 

子表:

ChildId , Code , ParentId 
1  , 'C1' , 1 
2  , 'C2' , 1 
3  , 'C3' , 2 
4  , 'C4' , 2 
5  , 'C5' , 3 

如果我們要求一個Parent,並且還加入了Child集合,我們將

  1. 收到5行DB服務器上,
  2. 將被轉換成只有3個不同的父對象上的應用程序級別
+0

感謝您的回覆,但我的情況下,我必須在Criteria中使用相同的;我不能直接將'IN'用於另一個標準的條件,因爲我必須使用DetachedCriteria。 但在DetachedCriteria中,我無法應用分頁。 – Ramkumar

0

我在這裏回答了這個:Pagination with Hibernate Criteria and DISTINCT_ROOT_ENTITY

你需要做三件事情:1)獲得總計數,2)得到你想要的行的ID,然後3)讓你的數據的ID foun d。在訂單正確後,它確實不是那麼糟糕,甚至可以創建一個通用方法,並將它發送給一個分離的標準對象以使其更加抽象。