Hibernate - как отсортировать по свойству первого элемента в коллекции oneToMany - PullRequest
0 голосов
/ 25 сентября 2019

Используя Spring Data JPA и HQL-запрос, я хотел бы отсортировать свои объекты по некоторому свойству отметки времени в свойстве oneToMany.

Учитывая запрос

select distinct t from Transport t 
join fetch t.waypoints wp  

Я бы хотелсделать что-то вроде (неверный синтаксис)

select distinct t from Transport t 
join fetch t.waypoints wp  
order by t.waypoints[0].someTimeStamp

Есть ли (относительно) простой способ сделать это в hql?Потому что если нет, то, вероятно, легче отсортировать результат в Java (поскольку в моем случае список не содержит много элементов, это не имеет большого значения)

Я пробовал что-то вроде (есть свойство порядкав путевой точке)

select distinct t,wp2 from Transport t 
join fetch t.waypoints wp inner join t.waypoints wp2 
where t.id in :ids and wp2.order = 0 
order by wp2.someTimeStamp

Но затем результаты умножаются.Если транспорт имеет n путевых точек, он появляется n раз в списке результатов ...

классы:

public class Transport {

    @Id
    private UUID id;


    @OneToMany(mappedBy = "transport")
    @OrderBy("order_ asc")
    private Set<Waypoint> waypoints = new LinkedHashSet<>();

}

@Entity
public class Waypoint {

    @Id
    private Long id;

    @ManyToOne
    @JoinColumn(name = "transport_id")
    private Transport transport;

    @Column(name = "order_")
    private Integer order;

    private Instant someTimeStamp;

}
...