簡體   English   中英

Hibernate 4.3.5 DetachedCriteria未獲取惰性列表

[英]Hibernate 4.3.5 DetachedCriteria not fetching lazy list

我有一個簡單的查詢可以使用很長時間,現在我將代碼中的某些內容更改為:
(hibernate.cfg.xml)

<property name="hibernate.transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property>
<property name="hibernate.current_session_context_class">thread</property>

和以下代碼:

public UserEn findByIDFetch(Long id, String... fetches) {
    beginTransaction();

    DetachedCriteria dc = DetachedCriteria.forClass(UserEn.class);
    for (String fetch : fetches) {
        dc.createAlias(fetch, fetch, JoinType.INNER_JOIN);
    }

    dc.add(Restrictions.eq("id", id));

    UserEn result = (UserEn) dc.getExecutableCriteria(getSession()).uniqueResult();
    commitTransaction();
    return result;
}

提交后,結果對象沒有加載列表(即正在添加自fetches
如果我做result.getAnyList().size(); 在提交之前,它會保持加載狀態,而且,如果我使用HQL它會完美運行。 (但這不是它應該如何工作的(使用時將其打開並加載),createAlias應該像往常一樣正常工作)

看起來DetachedCriteria的createAlias沒有獲取給定的路徑(在這種情況下為characterEnList

@編輯
我發現,如果我在所需路徑中使用setFetchMode (在這種情況下為characterEnList ),則提取工作正常,但如果我使用createAlias (照常),它將停止工作,無論如何,我不知道如何,可能是休眠錯誤或其他問題,我將等待有人回答,也許有人遇到同樣的問題...

僅在事務期間訪問時才延遲加載。 因此,您必須在事務處理過程中調用延遲加載的字段,以便休眠獲取它。 然后它將在視圖中可用。

或當然使它渴望。

發現相同的問題如下: https : //hibernate.atlassian.net/browse/HHH-7842這可能是一個錯誤,如果我要求它是別名的內部聯接,應該可以,我可以使用HQL,為什么我不能使用Criteria?

因此,現在我將不得不使用LEFT_OUTER_JOIN類型來解決此問題,或者根本不使用別名(如果我不需要創建where子句或2深度獲取)

希望對您有所幫助,謝謝您的幫助!

dc.createAlias(fetch, fetch, JoinType.LEFT_OUTER_JOIN);

要么

dc.setFetchMode(fetch, FetchMode.JOIN);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM