我有一个标准返回应用程序需要的所有数据,基本上是:
Criteria criteria = session.createCriteria(Client.class); criteria.createAlias("address","address"); criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY); criteria.setFirstResult(init); criteria.setMaxResults(max); List<Client> clients = criteria.list();
问题是关系客户端/地址是双向的:客户端有一个地址,一个地址可能属于多个客户端.
我想要根据他们的pk检索“单个”客户端对象,当然,一些客户端显示在表中.
因为setFirstResult / setMaxResults首先被执行,我已经在已经应用的限制内重复了客户端.之后(应用程序级别不是group by被使用)hibernate获取重复的客户端的rids,所以我最终得到较少的客户端setMaxResults中指定的最大值.
无法分组(投影组),因为它不会返回客户端/地址中所需的所有列,只会返回查询所分组的组.
(总而言之,我的表每页有100个结果,但丢弃重复之后,我有98个结果而不是100个…),这是因为限制:在休眠组之前应用LIMIT 0,100应该执行后)