在JPA Criteria Query中使用mysql选项SQL_CALC_FOUND_ROWS

时间:2013-10-11 10:43:17

标签: mysql jpa

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

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

但是在这种情况下,已经有了这个复杂的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选项的任何想法? 这个东西在带有Hibernate 3.5的Glassfish 3中运行

1 个答案:

答案 0 :(得分:0)

使用eclipselink时遇到了同样的问题,这对我来说是固定的:

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

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