我已经实现了ScrollableResults
对大数据库表的使用,一切正常,直到我想对另一个使用连接的表做同样的事情。
我遇到问题的实体有一些一对多的关联,所以我必须使用DISTINCT
not 来获取重复项。当我使用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 件事:
- 像我这样没有答案的问题很少,
- 描述一个可能和我的完全一样的案例的错误,但应该很久以前就修复了,
- 在一个 SO 答案中几乎没有评论告诉“DISTINCT_ROOT_ENTITY 在使用时不能很好地交互
scroll()
”。
这ScrollableResults
对我来说毫无用处,但由于节省了大量内存,我仍然需要它。你知道如何使用DISTINCT
used 实现滚动效果吗?或者任何解决方法?
休眠版本:4.2.4;JDK 7;数据库:MSSQL