我正在努力提高性能。我们同时使用Hibernate标准和命名查询从数据库中检索数据。在我们的应用程序中,我们从数据库中检索更多的行,并执行一些Java逻辑,因此我希望一次从数据库中提取更多的行,以避免网络访问数据库。由于oracle数据库的默认获取大小是10,我已经将其设置为400给criteria对象,如下所示。
Criteria crit = getSession().createCriteria(Phone.class);
crit.setFetchSize(400);我没有注意到响应时间有任何改进。当我在NamedQuery上设置更高的fetch大小时,我注意到了改进,如下所示。
Query query = session.getNamedQuery("getPhoneList");
query.setFetchSize(400);为什么crit.setFetchSize(400);不能像预期的那样工作,有什么建议吗?
发布于 2016-09-28 04:38:28
我已经测试了这个问题,crit.setFetchSize(400);似乎并没有限制返回的结果。但是,还有另一个有用的方法setMaxResults(int maxResults),它将限制从DB返回的结果。
看看下一张来自Hibernate API的图片:

我用红色标记了没有执行明显请求的行为的方法,也许它与红色矩形内的第二个方法有关。
看看这个绿色的矩形,它的方法会限制你从DB中得到的结果:

Criteria crit = getSession().createCriteria(Phone.class).setMaxResults(400);
List<Phone> list = crit.list();列表的最大大小为400。
https://stackoverflow.com/questions/39704176
复制相似问题