java - 按引用实体中的第一项对 JPA 存储库响应进行排序

标签 java jpa spring-data eclipselink jpql

我有这些 JPA 实体(简化):

@Entity
class Trip {
    @Id
    Long tripId;

    String travelerName;

    @OneToMany
    List<TripLeg> tripLegs;
}

@Entity
class TripLeg {
    @Id
    Long tripLegId;

    Calendar departureDate;

    @ManyToOne
    Trip trip;
}

和这个存储库:

interface TripRepository extends JpaRepository<Trip, Long> {
    Page<Trip> findByTravelerName(String travelerName, Pageable pageable);
}

有什么方法可以按行程中最早的出发日期对页面响应进行排序吗?是通过查询方法或 JPQL,还是在 Pageable 的排序属性中?

例如,这次旅行:

{
    id : 1,
    travelerName : "John Doe",
    tripLegs : [{
        id : 3,
        departureDate : 2015-10-03
    }]
}

将排序在此之后:

{
    id : 2,
    travelerName : "John Doe",
    tripLegs : [{
            id : 1,
            departureDate : 2015-10-01
        }, {
            id : 2,
            departureDate : 2015-10-05
    }]
}

最佳答案

您可以修改 findByTravelerName 方法来执行此操作

Page<Trip> findByTravelerNameOrderByTripLegsDepartureDateAsc(String travelerName, Pageable pageable);

或者尝试这个查询

SELECT trip FROM Trip as trip join trip.tripLegs as tleg group by tleg.trip_id order by tleg.departureDate ASC

关于java - 按引用实体中的第一项对 JPA 存储库响应进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40134675/

相关文章:

java - 如何以百分比设置元素的宽度?

java - 如何将 JSON 数据写入外部存储

java - 如何将文件从SpringBoot项目资源内的子文件夹复制到资源内的另一个子文件夹

java - 什么是 com.sun.proxy.$Proxy

jpa - 管理@NamedNativeQuery 和模式

java - 如何更新 MongoDB 中的嵌套文档而不是使用 Spring Data Java

java - 将Java Restful服务连接到Matlab程序

sql - 使用 EntityManager 和 hibernate 意外交叉连接生成的 SQL

java - 使用 spring data jpa 更新单个字段

spring-data - Spring Data JPA 规范中的左连接