2013-08-24 36 views
1

我已經實現了大數據庫表的使用,一切工作完美,直到我想對另一個表使用聯接。如何使用Hibernate查詢| Criteria.scroll()與DISTINCT沒有重複

我遇到問題的實體具有一些一對多關聯,因此我必須使用DISTINCT以避免重複。當我使用list()獲得查詢結果時,一切正常。但是當我使用scroll()DISTINCT似乎完全被忽略 - 我只是得到很多重複。

Query query = gameSession.createQuery("SELECT DISTINCT c FROM City c JOIN FETCH c.inhabitans i"); 

這種運作良好,列表中有沒有重複:

List<City> list = query.list(); 

這是不工作(給很多重複樣就不會有DISTINCT使用):

ScrollableResults sr = query.scroll(ScrollMode.FORWARD_ONLY); 

一切當我使用Criteria而不是Query時也是如此。我發現,只有3對這一具體問題的事情:

  1. 幾個問題,像我這樣沒有答案,
  2. 一個bug描述,可能是完全一樣像我這樣的情況,但應該已經固定時間長之前,
  3. 對SO回答之一的小評論告訴「當使用scroll()時,DISTINCT_ROOT_ENTITY不會很好地交互」。

這使得對我無用,但我仍然需要它,因爲大量的內存保存。你知道如何用DISTINCT實現滾動結果的使用?或任何解決方法?

Hibernate版本:4.2.4; JDK 7; DB:MSSQL

+0

您是否嘗試過將其轉換爲條件+ CriteriaSpecification.DISTINCT_ROOT_ENTITY? –

+0

是的,結果是一樣的。 – James

回答

0

使用根實體的Id爲查詢添加「order by」子句。