Hibernate HQL Count Distinct не работает?

У меня есть следующие классы:

class User {
  hasMany = [ratings: Rating] 
} 

class Item {
 hasMany = [ratings: Rating]
}

class Rating {
 belongsTo = [user: User, item: Item]
}

Я хочу подсчитать отдельных пользователей, которые оценили элемент.

Не работает следующее:

select count(distinct(r.user)) from Rating as r
        where r.item=:item
        group by r.user

Как мне изменить запрос HQL, чтобы он работал?

Ответ 1

Ваш запрос должен работать как ожидалось с незначительной модификацией способа использования distinct:

select count(distinct r.user) from Rating as r 
where r.item = :item group by r.user

Другой, но более длинный способ выполнения этого запроса - использовать User и join:

select count(distinct u) from User as u 
inner join u.ratings as r where r.item = :item
group by r.user

Ответ 2

Это как сделать в Hibernate Criteria

Criteria crit = session.createCriteria(Rating.class)
.add(Restrictions.like("item", item)
.addOrder(Order.asc("user"))
.setProjection(
       Projections.distinct(Projections.projectionList()
                        .add(Projections.property("user"), "user")))
.setResultTransformer(Transformers.aliasToBean(Rating.class));

Ответ 3

Просто запустите запрос в транзакции.

Transaction tx=session.beginTransaction;
//Run your query here
tx.commit();

Проблема возникает из-за кэширования спящего режима.