3

我在这里有一个相当复杂的查询,除了有限的结果集外,我还需要返回可用结果集的总数。

MySQL 中有 SQL_CALC_FOUND_ROWS 选项,它允许使用拦截器在后续查询中返回该数字。我已经在一个类似的项目中实现了这一点,通过使用带有本机查询和拦截器的休眠,它工作得很好。

但是在这种情况下,已经有这个复杂的 JPA Criteria 查询,如果我可以将那个 mysql 选项添加到条件查询中,我会非常高兴,但到目前为止还找不到这样做的方法。

以下是有关如何设置 entityManager 和 Criteria 的一些详细信息

    @Stateless
    class Dao{
      @PersistenceContext(unitName = "persistenceName")
      private EntityManager entityManager;

      @TransactionAttribute(TransactionAttributeType.SUPPORTS)
      public List<Entity> find(String someParam) {
        CriteriaBuilder cb = this.entityManager.getCriteriaBuilder();
        CriteriaQuery<Entity> cq = cb.createQuery(Entity.class);
        Root<Entity> root = cq.from(Entity.class);

        // some dummy predicate here
        cq.where(predicates);

        TypedQuery<Entity> query = this.entityManager.createQuery(cq);

        // limit query
        query.setFirstResult(100);
        query.setMaxResults(10);

        return query.getResultList();
      }
    }

任何想法如何添加 SQL_CALC_FOUND_ROWS 选项?这个东西在 Glassfish 3 和 Hibernate 3.5 中运行

4

1 回答 1

0

我在使用 eclipselink 时遇到了同样的问题,这为我解决了这个问题:

query.setHint("eclipselink.sql.hint", "SQL_CALC_FOUND_ROWS");

eclipselink.sql.hint 标志指示要在查询中的第一个单词之后立即添加字符串,在本例中为 SELECT。Hibernate 可能有一个等价物。

于 2014-06-16T09:26:20.223 回答