【发布时间】:2011-04-29 04:41:42
【问题描述】:
我正在尝试实现以下便捷方法:
/**
* Counts the number of results of a search.
* @param criteria The criteria for the query.
* @return The number of results of the query.
*/
public int findCountByCriteria(CriteriaQuery<?> criteria);
在 Hibernate 中,这是由
完成的criteria.setProjection(Projections.rowCount());
JPA 中与上面的等价物是什么?我发现了许多简单的计数示例,但没有一个使用应确定行数的 CriteriaQuery。
编辑:
不幸的是,我发现@Pascal 的答案不正确。这个问题非常微妙,只有在您使用连接时才会出现:
// Same query, but readable:
// SELECT *
// FROM Brain b
// WHERE b.iq = 170
CriteriaQuery<Person> query = cb.createQuery(Person.class);
Root<Person> root = query.from(Person.class);
Join<Object, Object> brainJoin = root.join("brain");
Predicate iqPredicate = cb.equal(brainJoin.<Integer>get("iq"), 170);
query.select(root).where(iqPredicate);
当调用findCountByCriteria(query)时,它会死掉并出现以下异常:
org.hibernate.hql.ast.QuerySyntaxException: Invalid path: 'generatedAlias1.iq' [select count(generatedAlias0) from xxx.tests.person.dom.Person as generatedAlias0 where generatedAlias1.iq=170]
有没有其他方法可以提供这样的CountByCriteria 方法?
【问题讨论】:
-
在哪里可以找到解决方案?我在同一个路口,不知道如何继续。谢谢。
-
@Ittai:我很确定这毕竟是不可能的。
-
@Ittai:显然,毕竟这是可能的。请参阅何塞·路易斯·马丁的回答。我没有尝试过,但这对我来说似乎是真正的解决方案。
-
非常感谢您的提醒,等我回来看看。
标签: orm jpa count jpa-2.0 criteria-api