如何使用HISTnate Query | Criteria.scroll()与DISTINCT无重复

时间:2013-08-24 21:47:43

标签: java hibernate

我已经为大数据库表实现了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时,一切都是一样的。我发现这个问题只有3件事:

  1. 很少有像我这样的问题没有答案,
  2. 一个bug描述一个像我一样绝对相同的案例,但这应该很久以前就已经修好了,
  3. 在其中一个SO答案中的评论很少,说明“当使用scroll()时,DISTINCT_ROOT_ENTITY不能很好地互动”。
  4. 这使得ScrollableResults对我无用,但我仍然需要它,因为存储量很大。您是否知道如何使用DISTINCT来实现滚动结果?或任何解决方法?

    Hibernate版本:4.2.4; JDK 7; DB:MSSQL

1 个答案:

答案 0 :(得分:0)

按&#34;添加&#34;顺序使用根实体的Id查询子句。