我试图在我的系统中构建分页。在DAO我使用" setFirstResult()"和" setMaxResults()"限制返回的行数。
查找
Query query = entityManager.createNamedQuery(namedQuery);
if (firstResult != null) {
query.setFirstResult(firstResult);
}
if (maxResult != null) {
query.setMaxResults(maxResult);
}
List returnList = query.getResultList();
但是对于分页工作,我需要知道行数而不受限制(firstResult()和maxResults())。
如果我有这个问题:
SELECT * FROM MyEntity e WHERE e.car = :carParam OFFSET 10 LIMIT 20
我想像这样计算
SELECT Count(*) FROM MyEntity e WHERE e.car = :carParam
但是我想避免为每个实体手动创建另一个查询,如何在不强制创建新的count()查询的情况下执行count()?
答案 0 :(得分:0)
如果不使用Criteria API或(如您所说)手动创建另一个查询,则无法计算结果总数。它们都将导致对数据库的单独查询以计算总计数。我在这方面有一些经验。如果您的查询将在庞大的数据集上运行,或者您有大量并发用户,它可能会使您的响应时间加倍。
我认为防止DBMS上这种开销的最佳方法是在搜索结果的末尾显示“加载更多”链接。如果显示总计数不是您的主要业务的一部分或者不是由客户强制,我强烈推荐这种方法。
查看this链接(如果您之前未检查过)