Hibernate Criteria Pagination在有或没有Fetch.Join的情况下变慢

时间:2016-03-03 00:12:54

标签: java performance hibernate pagination

我正在使用指向Oracle的Hibernate 3.6。我有一个带有分页和FetchJoins的Hibernate Criteria查询。

每当第一次执行查询时,大约需要26秒来读取具有2400行/对象的表。我每页显示20个结果,所以当我点击第50页时,再次需要相同的时间,即26秒。

我尝试删除Fetch.Join,结果仍然相同。任何人都可以提出可能存在的问题吗?

以下是代码段:

Criteria searchCriteria = getSession().createCriteria(Employee.class);
searchCriteria.setMaxResults(20);
searchCriteria.setFirstResult((currentPage-1)* limit);

long start1  = System.currentTimeMillis();

Number totalCount = (Number) countCriteria.setProjection(Projections.countDistinct("empCode")).uniqueResult();

LOG.info("Count of records for distinct(empCode) :- " + totalCount);//2400 rows

long end1  = System.currentTimeMillis();

LOG.info("Time taken in Executing criteria query for empCode - ms - " + (end1-start1)+", sec - "+ (end1-start1)/1000);

List<WebReward> results = searchCriteria
            .setFetchMode("empDetails.empGroup", FetchMode.JOIN)
            .setFetchMode("address", FetchMode.JOIN)
.list();

LOG.info("Time taken in Executing searchCriteria query with FetchMode- ms - " + (end2 - end1)+", sec - "+  (end2 - end1)/1000); // 26 seconds

注意: - Employee.class也是一个加入的视图。

0 个答案:

没有答案