首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Hibernate criteria.setFetchSize未按预期工作

Hibernate criteria.setFetchSize未按预期工作
EN

Stack Overflow用户
提问于 2016-09-26 21:26:33
回答 2查看 1.3K关注 0票数 1

我正在努力提高性能。我们同时使用Hibernate标准和命名查询从数据库中检索数据。在我们的应用程序中,我们从数据库中检索更多的行,并执行一些Java逻辑,因此我希望一次从数据库中提取更多的行,以避免网络访问数据库。由于oracle数据库的默认获取大小是10,我已经将其设置为400给criteria对象,如下所示。

代码语言:javascript
运行
复制
Criteria crit = getSession().createCriteria(Phone.class);
crit.setFetchSize(400);

我没有注意到响应时间有任何改进。当我在NamedQuery上设置更高的fetch大小时,我注意到了改进,如下所示。

代码语言:javascript
运行
复制
Query query = session.getNamedQuery("getPhoneList");
query.setFetchSize(400);

为什么crit.setFetchSize(400);不能像预期的那样工作,有什么建议吗?

EN

回答 2

Stack Overflow用户

发布于 2016-09-28 04:38:28

我已经测试了这个问题,crit.setFetchSize(400);似乎并没有限制返回的结果。但是,还有另一个有用的方法setMaxResults(int maxResults),它将限制从DB返回的结果。

看看下一张来自Hibernate API的图片:

我用红色标记了没有执行明显请求的行为的方法,也许它与红色矩形内的第二个方法有关。

看看这个绿色的矩形,它的方法会限制你从DB中得到的结果:

代码语言:javascript
运行
复制
Criteria crit = getSession().createCriteria(Phone.class).setMaxResults(400);
List<Phone> list = crit.list();

列表的最大大小为400。

票数 0
EN

Stack Overflow用户

发布于 2017-09-08 16:46:57

对以下帖子的回答也可以解释为什么setFetchSize不适用

What is difference between setMaxResults and setFetchSize in org.hibernate.Query?

在他谈到数据库驱动程序的第二部分,jazzinthemorning说:

“并非所有数据库驱动程序都实现了setFetchSize”

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

https://stackoverflow.com/questions/39704176

复制
相关文章

相似问题

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