我在这里有一个相当复杂的查询,除了有限的结果集之外,我还需要返回可用结果集的总数。
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中运行
答案 0 :(得分:0)
使用eclipselink时遇到了同样的问题,这对我来说是固定的:
query.setHint("eclipselink.sql.hint", "SQL_CALC_FOUND_ROWS");
eclipselink.sql.hint标志指示在查询中的第一个单词之后立即添加字符串,在本例中为SELECT。 Hibernate可能有一个等价物。