2012-06-15 3 views
0

Я должен заказать список дочерних объектов по датам. Прямо сейчас я делаю так:Спящий режим: @OrderBy

@OrderBy(clause = "arrivalDate ASC, arrivalTime ASC, departureDate ASC, departureTime ASC") 

где ArrivalDate и departureDate содержит дату, ArrivalTime и departureTime содержит время, но все они типа DATE.

Все замечательно до тех пор, пока я не добавлю новый элемент в список - он всегда отображается в конце списка. Как я могу это решить? Спасибо

ответ

5

Предложение OrderBy используется только в том случае, если Hibernate выбрал объекты из базы данных. Как только список находится в памяти, он работает как любой другой список на Java. Если вы добавите что-то в список, метод List.add() работает так, как это описано в его javadoc, и элемент добавляется в конце списка.

Если вы хотите, чтобы новый элемент был вставлен в соответствующий индекс в списке, вам нужно будет найти этот индекс самостоятельно или добавить его в список и отсортировать список, используя Comparator, который заказывает элементы на основе по прибытии, времени прибытия и т. д.

И, конечно, имейте в виду, что если вы измените одно из этих полей в элементе, который уже есть в списке, список больше не будет иметь порядок буксировки.

Возможно, вам следует полностью исключить аннотацию @OrderBy и просто добавить в свой объект метод getSortedItems(), который вернет отсортированную копию списка элементов.

+0

Другим вариантом является использование @ org.hibernate.annotations.Sort, который устанавливает SortedSet/SortedMap с предоставленным компаратором. –

Смежные вопросы