Hibernate Result Transformer不适用于Critera.scroll

时间:2018-04-28 18:26:08

标签: java spring hibernate

实体ObjA与另一个实体ObjB具有一对多关系。

我的dao中的以下代码按预期工作:

Session session = getSessionFactory().openSession();
Criteria criteria = session.createCriteria(ObjA);
//......
criteria.setReadOnly(true);
criteria.setCacheable(false);
criteria.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);
List<ObjA> results = criteria.list();

为了优化上面的代码(以避免OutOfMemoryException),我尝试使用ScrollableResults而不是criteria.list()

//same as above code..
ScrollableResults results = criteria.scroll(ScrollMode.FORWARD_ONLY);
while(results.next()){
    ObjA a = results.get()[0];
    session.evict(a); 
    //store 'a' in a collection
}

然而,使用这种方法,我最终获得了与ObjB对应的每个ObjA的单独行(在某种意义上,重复的根实体)。我试过驱逐实体,但仍然有重复的行。

知道我在做错了什么/在这里失踪了吗?

P.S。 Hibernate版本 - 3.5.1-FINAL

1 个答案:

答案 0 :(得分:0)

似乎这是一个永无止境的错误/必需的hibernate增强功能。 我最终使用fetch="select"进行所有一对多连接。

虽然这增加了db查询,但删除了重复的根实体。