在执行查询JPA之前获取rowCount

时间:2015-02-16 18:40:49

标签: java jpa

我试图在我的系统中构建分页。在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()?

1 个答案:

答案 0 :(得分:0)

如果不使用Criteria API或(如您所说)手动创建另一个查询,则无法计算结果总数。它们都将导致对数据库的单独查询以计算总计数。我在这方面有一些经验。如果您的查询将在庞大的数据集上运行,或者您有大量并发用户,它可能会使您的响应时间加倍。

我认为防止DBMS上这种开销的最佳方法是在搜索结果的末尾显示“加载更多”链接。如果显示总计数不是您的主要业务的一部分或者不是由客户强制,我强烈推荐这种方法。

查看this链接(如果您之前未检查过)