当我从根元素(例如,公司)向集合(例如,Employees)发送带有fetchMode JOIN和Alias LEFT_OUTER_JOIN的Criteria请求时,我没有设法使不同的公司分页(使用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名,但要加载员工以优化延迟加载。
答案 0 :(得分:1)
我发现这个post的情况与此类似。当您在标准中限制结果时,休眠将在SQL查询中应用该限制,并且在许多情况下,当使用联接/不同根实体时,它将导致结果列表较小。您报告的结果证实了这一点。
建议的解决方法是将别名的获取模式更改为SELECT
。结果是将调用多个查询,但肯定会比每个元素的延迟加载花费更少。