Используя 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;
}