Hibernate criteria.setFetchSize未按预期工作

时间:2016-09-26 13:26:33

标签: java hibernate

我正致力于提升绩效。我们使用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);未按预期运作的任何建议。

2 个答案:

答案 0 :(得分:0)

我已经测试了这个问题,似乎crit.setFetchSize(400);并不限制返回的结果。但是,还有另一种有用的方法setMaxResults(int maxResults)会限制数据库的返回结果。

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

enter image description here

我用红色标记了没有做出明显要求的行为的方法,也许它与红色矩形中的第二种方法有关。

使用限制DB结果的方法查看绿色矩形:

enter image description here

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;