如何在JPA critera API中做一个独特的计数?

我想这样做,但使用标准API代替:

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

有任何想法吗?

您可以在CriteriaBuilder上使用countDistinct

 criteriaQuery.select(criteriaBuilder.countDistinct(entityRoot)) 

像这样?

 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")); 

在查询中使用c.distinct(true)。

有关更多示例,请参阅http://relation.to/Bloggers/ATypesafeCriteriaQueryAPIForJPA 。