休眠标准:DISTINCT ENTITIES、FETCH JOIN和MaxResults

Hibernate Criteria : distinct entities, Fetch join and MaxResults(休眠标准:DISTINCT ENTITIES、FETCH JOIN和MaxResults)

本文介绍了休眠标准:DISTINCT ENTITIES、FETCH JOIN和MaxResults的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当我从根元素(例如Company)向集合(例如Employees)发出带有fetchMode联接和Alias Left_out_Join的条件请求时,我无法对不同的公司进行分页(使用MaxResults和FirstElement)。

criteria = sessionFactory.getCurrentSession().createCriteria(Company.class);

criteria.createAlias("employees", "employees", JoinType.LEFT_OUTER_JOIN);
criteria.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);
criteria.setFetchMode("employees", FetchMode.JOIN);

criteria.setFirstResult((pageNb - 1) * nbPerPage);
criteria.setMaxResults(nbPerPage);

如果我要求前20家公司,我只有3家,因为第一个结果有18名员工。

我希望得到要求的前20名,但员工要加载以优化延迟加载。

推荐答案

我发现这个post也有类似的情况。当您将结果限制在一个条件中时,Hibernate将在SQL查询中应用该限制,而当您使用联接/DISTINCT根实体时,在许多情况下,它将导致较小的结果列表。您报告的结果证实了这一点。
建议的解决方法是将别名的获取模式更改为SELECT。结果是将调用多个查询,但肯定比每个元素的延迟加载成本更低。

这篇关于休眠标准:DISTINCT ENTITIES、FETCH JOIN和MaxResults的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本文标题为:休眠标准:DISTINCT ENTITIES、FETCH JOIN和MaxResults

基础教程推荐