加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – Hibernate Criteria:不同的实体,然后限制

发布时间:2020-12-14 16:28:50 所属栏目:Java 来源:网络整理
导读:我有一个标准返回应用程序需要的所有数据,基本上是: Criteria criteria = session.createCriteria(Client.class);criteria.createAlias("address","address");criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);criteria.setFirstResult(init)
我有一个标准返回应用程序需要的所有数据,基本上是:
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应该执行后)

解决方法

正如在“Ashish Thukral”链接的线程中指出的那样,解决了这一点:
criteria.setFetchMode("address.clients",FetchMode.SELECT);

它阻止导致问题的连接.

当然,可以从xml配置文件中删除fetch =“join”,但这个解决方案不会影响可能在检索bean的其他地方.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读