【发布时间】:2015-11-28 22:14:43
【问题描述】:
我在互联网上找到了几种解决方案,但在性能方面,这些不是我搜索的。我有一个记录超过 10,000,000 条记录的表。我需要只读取最后 150 个结果。
query.select(trailRoot).distinct(Boolean.TRUE)
.where(buildPredicateForAuditTrail(auditTrailCriteria, criteriaBuilder, trailRoot));
final TypedQuery<AuditTrail> typedQuery = entityManager.createQuery(query);
return typedQuery.setFirstResult(auditTrailCriteria.calculateFirstResultIndex())
.setMaxResults(150).getResultList();
这段代码完成了这项工作。但它仍然从 db 中读取所有 10,000,000 条记录这使得 Web 服务器超载。我可以简单地限制查询吗,
SELECT *FROM Persons LIMIT 5;
有没有办法通过查询本身来限制结果? 非常感谢任何帮助。
谢谢。
【问题讨论】:
-
你可以试试
SELECT TOP 150 * FROM Persons ORDER BY ID DESC -
@saviNuclear 你的意思是命名查询??
-
LIMIT 显然不是 JPQL 关键字,“*”也不是有效的......请参阅任何 JPQL 参考。 MaxResults/FirstResult 是您为 JPQL 设置的
标签: java hibernate jpa spring-data-jpa persistence