【问题标题】:Get rowCount before execute query JPA在执行查询JPA之前获取rowCount
【发布时间】:2015-02-16 18:40:48
【问题描述】:

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

【问题讨论】:

标签: java jpa


【解决方案1】:

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

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

看看this链接(如果你以前没有检查过)

【讨论】:

  • “加载更多”确实是最好的解决方案,我没有考虑过。我会使用这个解决方案,谢谢。
猜你喜欢
  • 2016-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-27
  • 1970-01-01
  • 2010-10-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多