如何使用 JPA 和 CriteriaBuilder 按结果计算组?

ma-*_*ick 4 jpa-2.0

我认为这几乎是不可能的或非常棘手的。我正在使用 CriteriaBuilder、JPA 2.0、Hibernate 和 MariaDB,并希望使用 CriteriaBuilder 构建以下查询:

SELECT COUNT(*) FROM
   (SELECT DISTINCT(SomeColumn) // I think this is not possible?
    FROM MyTable
    WHERE ... COMPLEX CLAUSE ...
    GROUP BY SomeColumn) MyTable
Run Code Online (Sandbox Code Playgroud)

我的问题:可能吗?如果,如何?

感谢您对这件事的关注!

标记

Ras*_*nke 5

此示例假定您正在使用元模型生成。

CriteriaQuery<Long> cq = cb.createQuery(Long.class);
Subquery<SomeColumnType> subcq = cq.subquery(SomeColumnType.class);
Root<MyTable> from = subcq.from(MyTable.class);
subcq.select(from.get(MyTable_.someColumn));
subcq.where(** complex where statements **);
subcq.groupBy(from.get(MyTable_.someColumn));
cq.select(cb.count(subcq));
Run Code Online (Sandbox Code Playgroud)