繁体   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