我在这里有一个相当复杂的查询,除了有限的结果集外,我还需要返回可用结果集的总数。
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 中运行