在 @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);
在我的 @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);