Я хотел бы иметь набор дочерних объектов (здесь пример кошки-котенка), которые упорядочены. И сохраните свой порядок при добавлении новых элементов.
@Entity
public class Cat {
@OneToMany(mappedBy = "cat", cascade = CascadeType.ALL)
@OrderBy("name ASC")
private List<Kitten> kittens;
public void setKittens(List<Kitten> kittens) { this.kittens = kittens; }
public List<Kitten> getKittens() { return kittens; }
}
Когда я сделаю cat.getKittens.add(newKitten)
, порядок по имени будет нарушен.
Возможно ли, чтобы спящий режим выполнял работу по упорядочению коллекции? Используя аннотацию @Sort hibernate? @Sort имеет тот недостаток, что он заставляет вас реализовать интерфейс Comparable... Каким будет правильный "чистый JPA" способ сделать это? Сохранение всего в БД и его перезагрузка? Имеет смысл объединить @OrderBy и @Sort?
Обновление
Решение до сих пор заключается в объединении @OrderBy и @Sort. @OrderBy приводит к предложению ORDER BY
в сгенерированном SQL, который лучше подходит для производительности (я предполагаю, что java снова "сортируется" при вставке в отсортированный контейнер, но это должно быть намного быстрее, потому что элементы уже отсортированы)
@Sort вместе с реализованным интерфейсом Comparable
приводит к всегда отсортированному контейнеру. Обратите внимание, что теперь я использую SortedSet
вместо List
. Здесь обновленный Код:
@Entity
public class Cat {
@OneToMany(mappedBy = "cat", cascade = CascadeType.ALL)
@OrderBy("name ASC")
@Sort(type = SortType.NATURAL)
private SortedSet<Kitten> kittens;
public void setKittens(SortedSet<Kitten> kittens) { this.kittens = kittens; }
public SortedSet<Kitten> getKittens() { return kittens; }
}