【问题标题】:Order By in JPQL query on a @ElementCollection annotated map在 @ElementCollection 注释地图上的 JPQL 查询中排序
【发布时间】:2021-08-25 16:32:05
【问题描述】:

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

@ElementCollection
private Map<Student, Double> courseStudAndAvgStudGrade;

在上面的示例中,Student 是另一个 @Entity 注释类,其值是每个 StudentCourse 的平均成绩。我正在尝试在 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 吗?

【问题讨论】:

    标签: java hibernate jpql


    【解决方案1】:

    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);
    

    【讨论】:

      猜你喜欢
      • 2014-01-12
      • 2014-03-22
      • 1970-01-01
      • 1970-01-01
      • 2018-04-05
      • 2013-04-17
      • 1970-01-01
      • 2012-03-14
      • 2011-11-21
      相关资源
      最近更新 更多