Назначение заказа По полю сбора? - PullRequest
1 голос
/ 17 февраля 2012

Я пытался получить упорядоченный список элементов из базы данных.Насколько я понимаю, аннотации @ orderBy должно быть достаточно.

Можно аннотировать два места:

поле, представляющее коллекцию

@OrderBy
@OneToMany(cascade = CascadeType.ALL, mappedBy = Entry.REPORT_PROP)
private List<Entry> elements 

геттер

@OrderBy
public List<Entry> getElements()

Введение в проблему
Если поле и геттер аннотированы, полученный список упорядочен правильно.Однако, если аннотируется только поле, извлеченный список использует естественное упорядочение базы данных.

Вопрос
Делает ли аннотирование только поля что-нибудь?А если нет, то почему можно аннотировать только поля?

1 Ответ

3 голосов
/ 17 февраля 2012

Неважно, куда вы помещаете аннотацию.В зависимости от того, как вы аннотируете, должно быть три случая:

@OneToMany(...)
private List<Entry> elements;

должно означать, что список извлекается без какого-либо определенного порядка (ваша база данных SQL, вероятно, вернет их в некоторой упорядоченной форме, но в соответствии со стандартом, это совершенно законно, если это не так).

@OrderBy
@OneToMany(...)
private List<Entry> elements;

должен извлекать записи, упорядоченные по первичному ключу, а

@OrderBy("fieldname asc")
@OneToMany(...)
private List<Entry> elements;

должен извлекать записи, упорядоченные по имени поля в порядке возрастания, соответствующий следующему выражению JPQL:

"select e from Entry e ordered by fieldname asc"
...