2015-01-08 10 views
6

ich die Anzahl der group by Reihen mit Hibernate Criteria API zählen will, aber ich kann nur Anzahl der Zeilen in jeder Gruppe aggregiert zählen:Count Anzahl der Gruppe von Reihen in Hibernate mit Kriterien

ProjectionList projectionList = Projections.projectionList() 
     .add(Projections.groupProperty("color")) 
     .add(Projections.rowCount()); 
Criteria criteria = session.createCriteria("ProductEntity"); 
criteria.setProjection(projectionList); 
// adding some criteria 
List results = criteria.list(); 

Above Code wird in dieser Abfrage-Ergebnisse:

select p.color, count(*) from product p group by p.color 

Aber ich möchte diese Anfrage:

select count(*) from (select p.color from product p group by p.color) 

Ich weiß, dass es mit HQL möglich ist, aber ich möchte es nicht verwenden. Wie kann ich dies mit der Kriterien-API tun?

Antwort

2

Wenn Sie wissen wollen, wie viele verschiedene Farben vorhanden sind Sie

Projections.countDistinct("color") 

Dies wird eine Abfrage führen, die das gleiche Ergebnis wie diese zurückkehren verwenden sollte:

select count(*) from (select p.color from product p group by p.color) 
Verwandte Themen