我正在使用指向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也是一个加入的视图。