2011-01-06 12 views
5

Mam następujący kodProjections.countDistinct Hibernate produkuje nieoczekiwany wynik


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

, którego celem jest, aby dowiedzieć się liczbę wierszy z różnych wartości dla pola o nazwie „kolor”. Problemem jest to, że


Projections.countDistinct("color"); 

zwraca taką samą liczbę wyników jako


Projections.count("color"); 

chociaż istnieje wiele wierszy z tego samego koloru w widoku bazy danych. Przy konwersji obiektu Criteria do SQL, widzę, że SQL jest produkowane przez Hibernate


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

kiedy będę oczekiwać, że będzie


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

Dlaczego to nie działa tak jak oczekiwano, a jest tam jakiś zaradzić? Niestety nie mam możliwości użycia HQL w tym przypadku.

Odpowiedz

Powiązane problemy