【问题标题】:Spring Data JPA sort column not in table/entitySpring Data JPA 排序列不在表/实体中
【发布时间】: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


【解决方案1】:

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

改用本机查询。

【讨论】:

    猜你喜欢
    • 2019-09-30
    • 2013-08-09
    • 2013-11-27
    • 2018-05-20
    • 1970-01-01
    • 2015-07-10
    • 1970-01-01
    • 1970-01-01
    • 2015-09-11
    相关资源
    最近更新 更多