2011-01-06 12 views
5

ich den folgenden Code habeProjections.countDistinct mit Hibernate zu unerwartetem Ergebnis


Criteria criteria = this.getCriteriaForClass(DeviceListItem.class); 
Projection rowCountProjection = Projections.countDistinct("color"); 
criteria.setProjection(rowCountProjection); 
int rowCount = ((Long) criteria.uniqueResult()).intValue(); 
return rowCount; 

, dessen Zweck es ist, die Anzahl der Zeilen mit unterschiedlichen Werten für das Feld „Farbe“ genannt, um herauszufinden. Das Problem ist, dass


Projections.countDistinct("color"); 

die gleiche Anzahl von Ergebnissen als

gibt

Projections.count("color"); 

obwohl es mehrere Zeilen mit der gleichen Farbe in der Datenbankansicht. Wenn die Kriterien Objekt SQL Umwandlung, sehe ich, dass die von Hibernate erzeugt SQL


select count(this_.COLOR) as y0_ from DEVICESLIST_VIEW this_ where 1=1 

ist, wenn ich es


select count(distinct this_.COLOR) as y0_ from DEVICESLIST_VIEW this_ where 1=1 

Warum funktioniert es nicht erwarten würde wie erwartet und dort einige Abhilfe? Leider habe ich in diesem Fall keine Möglichkeit, HQL zu verwenden.

Antwort

Verwandte Themen