首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >不工作于Critera.scroll的Hibernate结果转换器

不工作于Critera.scroll的Hibernate结果转换器
EN

Stack Overflow用户
提问于 2018-04-28 18:26:07
回答 1查看 233关注 0票数 0

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

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

代码语言:javascript
复制
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()

代码语言:javascript
复制
//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-最终版本

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-01 18:12:39

在hibernate中,这似乎是一个永无止境的bug/所需的增强。最后,我在所有一对多的联接中使用了fetch="select"

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50079768

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档