实体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-最终版本
发布于 2018-05-01 18:12:39
在hibernate中,这似乎是一个永无止境的bug/所需的增强。最后,我在所有一对多的联接中使用了fetch="select"。
虽然这增加了db查询,但删除了重复的根实体。
https://stackoverflow.com/questions/50079768
复制相似问题