gpt4 book ai didi

java - 如何使用 Hibernate Query|Criteria.scroll() 和 DISTINCT 而不重复

转载 作者:行者123 更新时间:2023-12-01 04:26:50 27 4
gpt4 key购买 nike

我已经为大型数据库表实现了 ScrollableResults 的使用,一切都很完美,直到我想使用联接对另一个表执行相同的操作。

我遇到问题的实体具有一些一对多关联,因此我必须使用 DISTINCT 来避免重复。当我使用 list() 获取查询结果时,一切正常。但是当我使用 scroll() 时,DISTINCT 似乎被完全忽略 - 我只是得到了很多重复项。

Query query = gameSession.createQuery("SELECT DISTINCT c FROM City c JOIN FETCH c.inhabitans i");

这很好用,列表没有重复项:

List<City> list = query.list();

这是行不通的(给出许多重复项,就像没有使用 DISTINCT 一样):

ScrollableResults sr = query.scroll(ScrollMode.FORWARD_ONLY);

当我使用 Criteria 而不是 Query 时,一切都是一样的。关于这个特定问题,我只发现了三件事:

  1. 很少有像我这样没有答案的问题,
  2. 一个bug描述一个可能与我的完全相同的案例,但很久以前就应该修复了,
  3. 其中一个答案中的小评论指出“使用 scroll() 时,DISTINCT_ROOT_ENTITY 的交互效果不是很好”。

这使得 ScrollableResults 对我来说毫无用处,但由于节省了大量内存,我仍然需要它。您知道如何使用DISTINCT实现滚动结果吗?或有任何解决方法吗?

hibernate 版本:4.2.4; JDK 7;数据库:MSSQL

最佳答案

使用根实体的 ID 将“order by”子句添加到查询中。

关于java - 如何使用 Hibernate Query|Criteria.scroll() 和 DISTINCT 而不重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18423432/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com