Spring Data JPA排序列不在表/实体中

时间:2018-06-25 09:07:28

标签: spring-data-jpa

我有这样的查询:

    @Query(value = "SELECT new com.domain.ActivityStatistic( " +
        "adm.id, " +
        "adm.fullName, " +
        "COUNT(CASE WHEN (act.action = 'APPROVE') THEN act.action END) AS approved, " +
        "max(act.actionTime) AS lastActionTime) " +
        "FROM Actions act, Admins adm LEFT JOIN adm.group gr " +
        "WHERE adm.id = act.adminId AND act.actionTime BETWEEN ?1 AND ?2 AND gr.id = ?3 " +
        "GROUP BY adm.id")
Page<ActivityStatistic> getActivityStatistics(LocalDateTime from,
                                                              LocalDateTime to,
                                                              long groupId,
                                                              Pageable pageable);

如何按我创建的新字段(lastActionTime,已批准)对它进行排序? 我可以在postgresql:pgadmin中通过本机sql运行它。但是在jpa中,当我批准使用带有字段名称的sort时,它会自动成为act.approved在JPA查询中。

我以前读过这篇文章Spring Data and how to sort by a column not in an Entity,但没有帮助。

1 个答案:

答案 0 :(得分:1)

您不能在未映射到实体属性的表列上应用JPQL。 原因是JPA(包括JPQL)在这些实体上运行。

改为使用本机查询。