【发布时间】:2016-01-27 06:08:35
【问题描述】:
我们在我们的 Web 应用程序中使用 Hibernate + Spring boot,我们在 EntityManager 执行选择查询时遇到了性能问题。查询应返回 20 行,并在 DBArtisan 中执行
CriteriaQuery<Long> totalCriteriaQuery = criteriaBuilder.createQuery(Long.class);
Root<M> totalRoot = totalCriteriaQuery.from(modelClass);
totalCriteriaQuery.select(criteriaBuilder.count(totalRoot));
if (searchCriteria != null) {
totalCriteriaQuery.where(whereBuilder.build(searchCriteria, criteriaBuilder, totalRoot));
}
TypedQuery<Long> totalQuery = em.createQuery(totalCriteriaQuery);
contentQuery.setFirstResult(pageRequest.getOffset());
contentQuery.setMaxResults(pageRequest.getPageSize());
StopWatch stopWatch = new StopWatch();
stopWatch.start();
List<M> resultList = contentQuery.getResultList();
stopWatch.stop();
System.out.println("Nano seconds: "+ stopWatch.getNanoTime());
我正在寻找有关使用 EM 的性能的原因或任何建议。
【问题讨论】:
-
比较 SQL 执行时间和 HSQL 并返回对象是比较苹果和橘子。根据您的数据库使用分页非常慢,为什么还要使用分页它是一个计数,它总是变成一个结果。
-
您能否发布您在 DBArtisan 中运行的查询以及 JPA 生成的查询。除非它们是完全不同的查询,否则执行时间应该有任何显着差异。
-
这是生成的 JPA 查询(稍作修改以便在 DBArtisan 中运行): select * from dummytable as generatedAlias0 where generatedAlias0.final_decision is null order by generatedAlias0.id asc -- 它返回 20 行
标签: java spring hibernate jpa entitymanager