[英]Eager fetching nested object with DetachedCriteria in Hibernate
[英]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.