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 AOP错误无法懒惰地为此建议构建thisJoinPoin 2022-09-13
- Struts2 URL 无法访问 2022-01-01
- 如何对 Java Hashmap 中的值求和 2022-01-01
- 使用堆栈算法进行括号/括号匹配 2022-01-01
- 修改 void 函数的输入参数,然后读取 2022-01-01
- RabbitMQ:消息保持“未确认"; 2022-01-01
- 问题http://apache.org/xml/features/xinclude测试日志4j 2 2022-01-01
- 无法复制:“比较方法违反了它的一般约定!" 2022-01-01
- REST Web 服务返回 415 - 不支持的媒体类型 2022-01-01
- 存储 20 位数字的数据类型 2022-01-01
