编程语言
首页 > 编程语言> > java – 在JPA Criteria API中正确使用聚合语句

java – 在JPA Criteria API中正确使用聚合语句

作者:互联网

我正在努力正确使用像countDistinct这样的聚合语句.我找到了一些聚合查询的例子,但没有一个使用countDistinct从头到尾执行.

我试过这个:

    final CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();
    final CriteriaQuery<MyClass> query = criteriaBuilder.createQuery(MyClass.class);

    final Root<MyClass> root = query.from(MyClass.class);

    final Predicate yearPredicate = criteriaBuilder.equal(root.get("year"), currentYear);
    query.select(root);
    query.where(yearPredicate);

    final Expression<Long> count = criteriaBuilder.countDistinct(root);

这是我被困的地方.在root上运行countDistinct是否正确?我如何得到结果? query.select(计数);和criteriaBuilder.countDistinct(查询)都是非法的.如果有人能指出我正确的方向,那就太棒了.

谢谢

解决方法:

希望,这应该对你有所帮助:

CriteriaBuilder builder = entityManager.getCriteriaBuilder();

CriteriaQuery<Long> countCriteriaQuery = builder.createQuery( Long.class );
countCriteriaQuery.select( builder.countDistinct( countQuery.from( MyClass.class ) ) );

TypedQuery<Long> countQuery = entityManager.createQuery( countCriteriaQuery );
int totalObjectsNumber = countQuery.getSingleResult().longValue();

标签:java,jpa-2-0,java-ee-6,criteria-api
来源: https://codeday.me/bug/20190630/1333377.html