1

我已经实现了ScrollableResults对大数据库表的使用,一切正常,直到我想对另一个使用连接的表做同样的事情。

我遇到问题的实体有一些一对多的关联,所以我必须使用DISTINCTnot 来获取重复项。当我使用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. 描述一个可能和我的完全一样的案例的错误,但应该很久以前就修复了,
  3. 在一个 SO 答案中几乎没有评论告诉“DISTINCT_ROOT_ENTITY 在使用时不能很好地交互scroll()”。

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

休眠版本:4.2.4;JDK 7;数据库:MSSQL

4

1 回答 1

0

使用根实体的 Id 在查询中添加“order by”子句。

于 2017-08-03T15:33:09.607 回答