小编Ran*_*Ran的帖子

使用 Spring JPA CriteriaBuilder 按别名排序

我正在尝试找到一种解决方法来解决 JPA 不支持 order by 子查询的问题。

如何使用 CriteriaBuilder 实现以下查询?

@Query(value =
        "SELECT DISTINCT t,(SELECT sum(ta.size) FROM TaskArea ta WHERE ta.task.id = t.id) as total " +
        "FROM Task t " +
        "ORDER BY total")
List<Tuple> ordered();
Run Code Online (Sandbox Code Playgroud)

我尝试执行以下操作,但它不起作用:

public List<Tuple> ordered() {
    CriteriaBuilder cb = em.getCriteriaBuilder();
    CriteriaQuery<Tuple> cq = cb.createQuery(Tuple.class);
    Root<Task> root = cq.from(Task.class);

    Subquery sub = cq.subquery(Long.class);
    Root<TaskArea> subRoot = sub.from(TaskArea.class);
    sub.select(cb.sum(subRoot.get(TaskArea_.size)));
    sub.where(cb.equal(root.get(Task_.id), subRoot.get(TaskArea_.task).get(Task_.id)));
    sub.alias("total");

    cq.multiselect(root, sub.getSelection());
    cq.orderBy(cb.asc(sub)); // duplicate the subquery into order by section instead of use the …
Run Code Online (Sandbox Code Playgroud)

hibernate jpa spring-data spring-data-jpa

5
推荐指数
0
解决办法
1448
查看次数

标签 统计

hibernate ×1

jpa ×1

spring-data ×1

spring-data-jpa ×1