休眠条件:不同的实体,提取联接和MaxResults

时间:2019-01-30 14:31:30

标签: java hibernate criteria hibernate-criteria

当我从根元素(例如,公司)向集合(例如,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名,但要加载员工以优化延迟加载。

1 个答案:

答案 0 :(得分:1)

我发现这个post的情况与此类似。当您在标准中限制结果时,休眠将在SQL查询中应用该限制,并且在许多情况下,当使用联接/不同根实体时,它将导致结果列表较小。您报告的结果证实了这一点。
建议的解决方法是将别名的获取模式更改为SELECT。结果是将调用多个查询,但肯定会比每个元素的延迟加载花费更少。