2012-06-23 32 views
1

我認爲這幾乎不可能或非常棘手。我使用CriteriaBuilder,JPA 2.0,Hibernate和MariaDB的,並希望建立與CriteriaBuilder以下查詢:如何使用JPA和CriteriaBuilder對結果進行計數?

SELECT COUNT(*) FROM 
    (SELECT DISTINCT(SomeColumn) // I think this is not possible? 
    FROM MyTable 
    WHERE ... COMPLEX CLAUSE ... 
    GROUP BY SomeColumn) MyTable 

我的問題:可能嗎?如果,如何?

感謝包裹你的頭腦解決此!

馬克

+0

有了標準構建器,你的意思是Criteria API? Criteria API支持複雜的where語句,group by,count,獨立於單個字段和子查詢。我看到的最大限制是你不能執行自定義連接。 –

+0

Criteria API,是的。但似乎沒有.from(Query)或我錯過了什麼? –

+0

您使用子查詢,如cb.select(子查詢)。無論如何,我不認爲這裏需要子查詢,請參閱下面的示例。 –

回答

2

此示例假定您正在使用元模型生成。

CriteriaQuery<Long> cq = cb.createQuery(Long.class); 
Subquery<SomeColumnType> subcq = cq.subquery(SomeColumnType.class); 
Root<MyTable> from = subcq.from(MyTable.class); 
subcq.select(from.get(MyTable_.someColumn)); 
subcq.where(** complex where statements **); 
subcq.groupBy(from.get(MyTable_.someColumn)); 
cq.select(cb.count(subcq)); 
+0

不,實際上這兩個查詢不等價。我的查詢計數是組數(單個結果),因爲您的查詢會給出每個組的計數列表(計數列表)。 –

+0

啊,這是真的。將不得不考慮一點 –

+0

刪除組,並計數(不同someColumn)將按預期工作。不同的是你的分組工作。 –

相關問題