实体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
答案 0 :(得分:0)
似乎这是一个永无止境的错误/必需的hibernate增强功能。
我最终使用fetch="select"
进行所有一对多连接。
虽然这增加了db查询,但删除了重复的根实体。