Используя hibernate с аннотациями, я хочу отсортировать отношения один-много - PullRequest
2 голосов
/ 25 мая 2010

Используя hibernate с аннотациями, я хочу, чтобы отношение «один-много» сортировалось по полю «create» таблицы «many».

Пока у меня есть это, которое всегда заканчивается в случайном порядке:

// The notes 
@OneToMany
@JoinColumn(name="task_id")
Set<TaskNote> notes;
public Set<TaskNote> getNotes() {return notes;}
public void setNotes(Set<TaskNote> notes) {this.notes = notes;} 

Ответы [ 3 ]

6 голосов
/ 25 мая 2010

, поскольку ни один из ответов не дал вам полного решения:

@OneToMany
@JoinColumn(name="task_id")
@OrderBy("created")
List<TaskNote> notes;
public List<TaskNote> getNotes() {return notes;}
public void setNotes(List<TaskNote> notes) {this.notes = notes;}

Set неупорядочено, поэтому используйте List, и вам также понадобится аннотация @OrderBy.

2 голосов
/ 25 мая 2010

У вас есть два варианта, вы можете либо @OrderBy("created"), который будет делать то, что вы ожидаете в SQL.

Вы также можете @Sort, что позволяет указать произвольную реализацию компаратора, если вы хотите по какой-то причине выполнить сортировку в памяти.

Редактировать: непредсказуемый порядок итераций является деталью реализации HashSet, он не является частью контракта интерфейса Set. Hibernate с радостью будет использовать LinkedHashSet, когда вы используете отображение XML и задаете порядок в наборе. Я предположил, что он делает то же самое, когда вы используете аннотацию, извинения, если это было неправильно.

2 голосов
/ 25 мая 2010

Используйте список вместо набора. Список сохраняет порядок, а набор - нет. При использовании List порядок элементов будет соответствовать тому, что вы указали для ORDER BY в HQL или с использованием критериев.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...