這是一個很老的問題,但對於completness這裏有一個簡單的加法:
標題說了一些關於「使用countDistinct」 ,所以應該在這裏提及countDistinct:
CriteriaBuilder critBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<Long> critQuery = criteriaBuilder.createQuery(Long.class);
Root<Foo> root = critQuery.from(Foo.class);
critQuery.select(critBuilder.countDistinct(root));
int count = entityManager.createQuery(critQuery).getSingleResult().intValue();
如果您不想計算雙倍的行,這非常重要。 如果你想避免在您的ResultList逗樂行,你就必須使用:
CriteriaBuilder critBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<Long> critQuery = criteriaBuilder.createQuery(Long.class);
Root<Foo> root = critQuery.from(Foo.class);
critQuery.select(root).distinct(true);
List<Foo> result = entityManager.createQuery(critQuery).getResultList();
Arghhh。我是新的,這是一個簡單的錯誤。 – Tim 2010-04-17 14:21:03