2013-03-22 2 views
0

Скажем, у меня есть следующие объектыJPA сортировки запроса по свойству последнего элемента в коллекции детской

class Order { 

    @Id 
    private long id; 

    private long orderNo; 

    @OneToMany 
    @JoinColumn(name="order_id") 
    @OrderBy("timeStamp ASC") 
    private List<Item> items; 
} 

class Item { 
    @Id 
    private long id; 

    // e.g. COMPLETED, IN PROGRESS, QUEUED, etc... 
    private String status; 

    private long timeStamp; 

    @ManyToOne 
    private Order order; 
} 

Использование JPA Я хочу вернуть список заказов, которые отсортированы по статусу из последнего пункта в деталях список, который является самым последним, поскольку элементы - это порядок по времени. Как это может быть сделано?

+0

Я сильно подозреваю, что это не может быть сделано в запросе JPQL. Если бы я был вами, я бы либо сохранил самую последнюю метку времени в объекте Order и отсортировал ее (помня, чтобы сохранить ее в обновленном виде), либо реализовать пользовательский 'Comparator ' и использовать' Collections.sort' (сортировать в Java кода, а не в запросе JQPL). – Nick

ответ

2

Что-то подобное,

Select o from Order o join o.items i where i.id = (Select max(timestamp) from Item i2 where i = i2) order by i.status 
Смежные вопросы