Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate 使用Spring JPA CriteriaBuilder按别名订购_Hibernate_Jpa_Spring Data Jpa_Spring Data - Fatal编程技术网

Hibernate 使用Spring JPA CriteriaBuilder按别名订购

Hibernate 使用Spring JPA CriteriaBuilder按别名订购,hibernate,jpa,spring-data-jpa,spring-data,Hibernate,Jpa,Spring Data Jpa,Spring Data,我试图找到一个解决办法,来解决JPA不支持ORDERBY子查询的问题 如何使用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> or

我试图找到一个解决办法,来解决JPA不支持ORDERBY子查询的问题

如何使用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();
我已尝试执行以下操作,但不起作用:

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 alias
    // cq.orderBy(cb.asc(cb.literal("total"))); // not working 
    return em.createQuery(cq).getResultList();
}
有没有办法告诉CriteriaBuilder使用别名而不是复制子查询


请不要建议使用连接等重写查询-实际情况非常复杂,使用连接根本不容易或根本不可能做到这一点

如何做到这一点?在类似的情况下。