回答
這應該做的伎倆(如果你想使用JPA標準API):
CriteriaBuilder cb = getEntityManager().getCriteriaBuilder();
CriteriaQuery<Long> query = cb.createQuery(Long.class);
Root<Entity> root = query.from(Entity.class);
//Selecting the count
query.select(cb.count(root));
//Create your search criteria
Criteria criteria = ...
//Adding search criteria
query.where(criteria);
Long count = getEntityManager().createQuery(query).getSingleResult();
在另一方面,如果你想使用JP-QL,下面的代碼應該做的伎倆:
//Add the where condition to the end of the query
Query query = getEntityManager().createQuery("select count(*) from Entity entity where...")
Long count = query.getSingleResult();
我在這個問題上絆倒也。我最終希望執行以下JPQL:
SELECT COUNT(u)
FROM (
SELECT DISTINCT u
FROM User u
JOIN u.roles r
WHERE r.id IN (1)
)
但是,這是不可能的,也不符合標準API。研究表明,這只是JPA的設計限制。 JPA規範規定,子查詢只在WHERE
和HAVING
條款支持(因而在FROM
沒有)。
重寫下面的JPQL形式查詢:
SELECT COUNT(u)
FROM User u
WHERE u IN (
SELECT DISTINCT u
FROM User u
JOIN u.roles r
WHERE r.id IN (1)
)
使用JPA標準API類似如下:
CriteriaQuery<Long> query = cb.createQuery(Long.class);
Root<User> u = query.from(User.class);
Subquery<User> subquery = query.subquery(User.class);
Root<User> u_ = subquery.from(User.class);
subquery.select(u_).distinct(true).where(u_.join("roles").get("id").in(Arrays.asList(1L)));
query.select(cb.count(u)).where(cb.in(u).value(subquery));
Long count = entityManager.createQuery(query).getSingleResult();
// ...
已經解決了這個功能要求我。這也應該讓您充分了解解決您的特定功能需求。
如果要統計彙總查詢 – 2015-05-19 07:44:18
的結果,你不能用這種方法@馬丁,你會從任意CriteriaQuery中建議DISTINCT COUNT什麼辦法? – svlada 2015-05-19 18:47:18
@svlada,我沒有找到有效的解決方案,只返回所有行並在應用程序服務器上計數。 – 2015-05-20 09:12:24
- 1. 計算select查詢返回的行數
- 2. 如何返回查詢以計算行數,以及如何計算行數?
- 3. 如何計算DQL查詢返回的行數?
- 4. MySQL:如何計算複雜查詢返回的行數
- 5. 如何計算從WQL查詢返回的總行數?
- 6. 如何計算MySQL查詢返回的行數?
- 7. 如何計算從wordpress使用sql查詢返回的行數?
- 8. 如何添加子查詢以返回相關行的計數
- 9. 如何計算返回的mysql組查詢中的行號?
- 10. 無法計算爲什麼子查詢返回多於一行
- 11. 如何計算從MySQL查詢返回的結果總數?
- 12. 如何計算從查詢返回的多個數組,
- 13. 計數從查詢返回的行
- 14. 計算在laravel中查詢返回的行數量
- 15. 如何寫多行父查詢單行返回子查詢子查詢
- 16. 如何計算在Codeigniter中使用Datamapper查詢返回的行數
- 17. SQL查詢計算返回結果
- 18. 如何計算HQL中的子查詢?
- 19. 如何使這個查詢也返回0計數值的行?
- 20. 如何計算查詢返回的字段中的公式?
- 21. 如何計算從python中的select查詢返回的值
- 22. 如何返回MySQL的子查詢的行數
- 23. 如何創建從子查詢返回數組的查詢?
- 24. 如何計算Hibernate查詢對象返回的內容?
- 25. SQL查詢返回 「子查詢返回多個1行」
- 26. SQL查詢不返回行時計數(*)= 0與WHERE子句
- 27. 如何計算子行數?
- 28. mysql子查詢計數返回gloabl計數並忽略其中
- 29. 如何在返回的列數爲動態時計算MySQL查詢的列數?
- 30. 計算子查詢的Mysql
問題是,我希望得到一個子查詢返回的行數。看起來這是不可能的,因爲子查詢不能像JPA – 2011-03-28 06:58:47
那樣使用這完全沒有回答具體問題。 OP詢問如何計算子查詢的結果,而不是如何計算查詢結果。 – BalusC 2012-08-22 15:29:21