在 @ElementCollection 注释地图上的 JPQL 查询中排序

Order By in JPQL query on a @ElementCollection annotated map

在我的 @Entity 注释 Course class 中,我有以下 @ElementCollection 注释地图:

@ElementCollection
private Map<Student, Double> courseStudAndAvgStudGrade;

在上面的示例中,Student 是另一个 @Entity 注释 class,该值是 Course 每个 Student 的平均成绩。我正在尝试在 JPQL 中编写一个查询,该查询将检索此映射的所有条目并按条目值降序排序。

到目前为止,我有以下内容:

TypedQuery<Tuple> query =
              em.createQuery("SELECT KEY(map), VALUE(map) "
                      + "FROM Course c JOIN c.courseStudAndAvgStudGrade map WHERE c.id = :id", Tuple.class);

这会在 Tuple 中为所需的 Course 正确检索值,但是将 ORDER BY VALUE(map) DESC 添加到 JPQL 查询会导致 java.sql.SQLException: Subquery returns more than 1 row.

是否可以在 JPQL 中的地图上执行 ORDER BY

JPA/Hibernate 不需要 VALUE 限定符,即它实际上只是为了完整性。尝试以下查询:

em.createQuery("SELECT KEY(map), map FROM Course c JOIN c.courseStudAndAvgStudGrade map WHERE c.id = :id ORDER BY map DESC", Tuple.class);