2016-03-26 1 views
0

Следующие результаты кода со всеми строками, где ispassed=true:Критерии API и уникальные результаты

Criteria crit = hSession.createCriteria(ResultTable.class); 
crit.add(Restrictions.eq("ispassed", true)); 
crit.setProjection(Projections.rowCount()); 
total = (long) crit.uniqueResult(); 

Но таблица «ResultTable» содержит также user_id колонку и могут быть строки, как:

-ispassed    -user_id 
true     1 
true     1 
true     2 
true     3 
true     4 

Так как могу ли я получить только строки, где user_id уникален? Чтобы результат был равен 4.

ответ

1

Я думаю, что вы хотели, чтобы получить число рядов, isPassed статус истинно и хотим рассмотреть только один такой записи для каждого пользователя. Если да, то вы можете попробовать:

Criteria crit = hSession.createCriteria(ResultTable.class); 
crit.add(Restrictions.eq("ispassed", true)); 
crit.setProjection(Projections.groupProperty("userId")); 
total = crit.list().size(); 

Примечание: Предполагая, что user_id отображается в userId поле в вашем ResultTable сущности.

+0

@rozerro Мы можем еще больше упростить его. Обновлен ответ. Вы можете попробовать. –

 Смежные вопросы

  • Нет связанных вопросов^_^