Ich habe den folgenden Code
Criteria criteria = this.getCriteriaForClass(DeviceListItem.class);
Projection rowCountProjection = Projections.countDistinct("color");
criteria.setProjection(rowCountProjection);
int rowCount = ((Long) criteria.uniqueResult()).intValue();
return rowCount;
, deren Ziel es ist, die Anzahl der Zeilen mit unterschiedlichen Werten für das Feld "Farbe" zu ermitteln. Das Problem ist, dass
Projections.countDistinct("color");
liefert die gleiche Anzahl von Ergebnissen wie
Projections.count("color");
auch wenn es in der Datenbankansicht mehrere Zeilen mit derselben Farbe gibt. Bei der Konvertierung des Criteria-Objekts in SQL sehe ich, dass die von Hibernate erzeugte SQL lautet
select count(this_.COLOR) as y0_ from DEVICESLIST_VIEW this_ where 1=1
wenn ich es erwarten würde
select count(distinct this_.COLOR) as y0_ from DEVICESLIST_VIEW this_ where 1=1
Warum funktioniert es nicht wie erwartet und gibt es eine Lösung? Leider habe ich keine Möglichkeit, HQL in diesem Fall zu verwenden.