【发布时间】:2018-12-03 19:31:55
【问题描述】:
我有这样的疑问:
@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,approved ? 我可以通过 postgresql 中的本机 sql 运行它:pgadmin。但是在 jpa 中,当我使用带有字段名称的排序被批准时,它会在 JPA 查询中自动变为 act.approved。
我曾经读过这篇帖子Spring Data and how to sort by a column not in an Entity,但没有帮助。
【问题讨论】:
-
我通过使用本机查询解决了这个问题,并创建了具有属性的新实体(不创建表):approved, lastActionTime。并且为了使用可分页排序,我使用表名而不是表别名(例如:使用管理员而不是 adm。它可以工作。
标签: spring-data-jpa