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

本教程将介绍休眠标准:DISTINCT ENTITIES、FETCH JOIN和MaxResults的处理方法,这篇教程是从别的地方看到的,然后加了一些国外程序员的疑问与解答,希望能对你有所帮助,好了,下面开始学习吧。

休眠标准:DISTINCT ENTITIES、FETCH JOIN和MaxResults 教程 第1张

问题描述

当我从根元素(例如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的教程就到这里就结束了,希望趣模板源码网找到的这篇技术文章能帮助到大家,更多技术教程可以在站内搜索。