Как сделать четкий подсчет в JPA critera API? - PullRequest
11 голосов
/ 01 июня 2011

Я бы хотел это сделать, но вместо этого использовать API критериев:

select count(distinct e) from Event e, IN(e.userAccessPermissions) p where p.principal = :principal and p.permission in (:permissions)

Есть идеи?

Ответы [ 3 ]

23 голосов
/ 03 ноября 2011

Вы можете использовать countDistinct для CriteriaBuilder

criteriaQuery.select(criteriaBuilder.countDistinct(entityRoot))
1 голос
/ 01 июня 2011

Как это?

Criteria crit = session.createCriteria(Event.class):
crit.createAlias("userAccessPermissions", "p");
crit.add(Restrictions.eq("p.principal", principal);
crit.add(Restrictions.in("p.permission", permissions);
crit.setProjection(Projections.countDistinct("id"));
0 голосов
/ 01 июня 2011

Используйте c.distinct (true) для вашего запроса.

См. http://relation.to/Bloggers/ATypesafeCriteriaQueryAPIForJPA для большего количества образцов.

...