【问题标题】:Proper use of aggregate statements in JPA Criteria API在 JPA Criteria API 中正确使用聚合语句
【发布时间】:2012-06-01 07:10:27
【问题描述】:

我正在努力正确使用像 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);

这是我卡住的地方。在根目录上运行countDistinct 是否正确?我如何得到结果? query.select(count);criteriaBuilder.countDistinct(query) 都是非法的。如果有人能指出我正确的方向,那就太好了。

谢谢

【问题讨论】:

    标签: java jpa-2.0 java-ee-6 criteria-api


    【解决方案1】:

    希望对您有所帮助:

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

    【讨论】:

    • 啊,现在说得通了 :) 谢谢,stemm
    猜你喜欢
    • 1970-01-01
    • 2014-08-02
    • 2021-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-26
    • 2017-04-13
    • 1970-01-01
    相关资源
    最近更新 更多