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();
Проблема возникает из-за кэширования спящего режима.