Hibernate Criteria : distinct entities, Fetch join and 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
基础教程推荐
- Spring Boot Freemarker从2.2.0升级失败 2022-01-01
- 首次使用 Hadoop,MapReduce Job 不运行 Reduce Phase 2022-01-01
- 如何使用 Eclipse 检查调试符号状态? 2022-01-01
- 如何使用 Stream 在集合中拆分奇数和偶数以及两者的总和 2022-01-01
- Java 中保存最后 N 个元素的大小受限队列 2022-01-01
- 由于对所需库 rt.jar 的限制,对类的访问限制? 2022-01-01
- 如何在不安装整个 WTP 包的情况下将 Tomcat 8 添加到 Eclipse Kepler 2022-01-01
- 在螺旋中写一个字符串 2022-01-01
- 如何强制对超级方法进行多态调用? 2022-01-01
- 如何对 HashSet 进行排序? 2022-01-01