5 Stimmen

Projections.countDistinct mit Hibernate erzeugt ein unerwartetes Ergebnis

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.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X