2012-08-17 64 views
1

我想使用休眠條件查詢只獲取集合的一部分。作爲一個例子,可以說我有一個包含多個Student對象的Class對象。現在我想獲得一個類的列表,但只有德國學生應該被帶入學生集合(其餘不需要,並且將是大量開銷),只有一個數據庫查詢。休眠:部分獲取集合?

在休眠(我想3.6.4之前),這可以通過使用濾波個createCriteria這樣做的更高版本:

criteria.createCriteria("students", "studentscollection", Criteria.LEFT_JOIN, 
    Restrictions.eq("studentscollection.country", "DE")); 

的問題是,在休眠的當前版本留下永久的集合初始化並觸發大量的數據庫查詢,爲每個訪問集合加載整個集合。這是一個巨大的性能問題,導致數百個查詢而不是一個。

在當前的休眠版本中是否有任何解決方案使用一個查詢來完成此操作?

回答

0

考慮使用較低版本的hibernate。我們最近在團隊中遇到了類似的困境。據我記得,我使用了4.0.1版本的類似結構,並且不記得多個查詢/效率的問題。但是,您是對的,可以更改版本3.6.4中的行爲(https://hibernate.onjira.com/browse/HHH-2049?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel),讓我們知道您是否可以找到答案。

問候,

盧卡斯

+0

至於我可以告訴以後每一個版本和3.6.4,包括有 – Werzi2001 2012-08-17 09:12:55

+0

我認爲,這種變化之意。我已經評論了jira條目HHH-2049,並要求獲得一個標誌來告訴hibernate我實際上想要舊行爲,但我認爲它不會實現。保持較舊的休眠版本並不是真正的選擇。 – Werzi2001 2012-08-26 11:07:50