我正致力于提升绩效。我们使用Hibernate Criteria和Named Query来从数据库中检索数据。 在我们的应用程序中,我们从数据库中检索更多行并执行一些Java逻辑,因此我希望一次从数据库中获取更多行,以避免网络访问数据库。 由于oracle数据库的默认提取大小为10,因此我将此设置为400以符合条件对象。
Criteria crit = getSession().createCriteria(Phone.class);
crit.setFetchSize(400);
我没有发现响应时间有任何改善。 当我在NamedQuery上设置更高的提取大小时,我注意到了改进,如下所示。
Query query = session.getNamedQuery("getPhoneList");
query.setFetchSize(400);
有关crit.setFetchSize(400);
未按预期运作的任何建议。
答案 0 :(得分:0)
我已经测试了这个问题,似乎crit.setFetchSize(400);
并不限制返回的结果。但是,还有另一种有用的方法setMaxResults(int maxResults)
会限制数据库的返回结果。
看一下Hibernate API的下一张图片:
我用红色标记了没有做出明显要求的行为的方法,也许它与红色矩形中的第二种方法有关。
使用限制DB结果的方法查看绿色矩形:
Criteria crit = getSession().createCriteria(Phone.class).setMaxResults(400);
List<Phone> list = crit.list();
列表的最大大小为400。
答案 1 :(得分:0)
以下帖子的答案也可以解释为什么 setFetchSize 没有应用
What is difference between setMaxResults and setFetchSize in org.hibernate.Query?
他讨论数据库驱动程序的第二部分,jazzinthemorning说:
所有数据库驱动程序都没有实现&#34; setFetchSize &#34;