Как сохранить заказанную коллекцию в JPA / Hibernate? - PullRequest
0 голосов
/ 24 апреля 2019

У меня есть основная сущность:

@Data
@Entity
@Table(name = "MAINS")
public class Main {

...

@OneToMany(mappedBy = "main", cascade = {CascadeType.PERSIST, CascadeType.MERGE}, fetch = LAZY)
private List<Chield> children;

И у меня есть дочерняя сущность:

@Data
@Entity
@Table(name = "CHILDS")
public class Child {

    @Id
    @Column(name = "GUID")
    private String guid;

    @Column(name = "NAME")
    private String name;

    @Column(name = "Age")
    private Integer age;

И я пытаюсь сохранить одну Main со многими Child:

  List<Child> children = new ArrayList<>();
  for (int i = 0, i< 10; i++) {
      Child child = new Child();
      child.setId(i);
      child.setName("Name"+i);
      child.setAge(10+i);
      children.add(child);
   }
   main.setChildren(children);
   MainRepository.save(main);

Но мне нужно, чтобы эти дети заказали.Я могу добавить новый столбец к Child - order и установить child.setOrder(order++);, и когда я выбираю этот список, я могу отсортировать его по полю заказа.

Но могу ли я сделать это по-другому?Без добавления нового столбца?

1 Ответ

0 голосов
/ 24 апреля 2019

Если я правильно понял ваш вопрос, было бы полезно проверить следующие параметры:

OrderColumn

   @OrderColumn(name = "index_id")
    private List<Child> changes = new ArrayList<>();

ИЛИ

@OrderBy("id")
private Set<Child>list = new  LinkedHashSet<>();

OR

@SortNatural
private SortedSet<Child> children = new TreeSet<Child>();

DOCS: NaturalSort

ИЛИ для пользовательского компаратора: @SortComparator(SortById.class)

DOCS: customSort

public class SortById implements Comparator<Child> {

Logger log = Logger.getLogger(SortById.class.getSimpleName());

@Override
public int compare(Child o1, Child o2) {
    log.info("Child.compare");
    return o1.getId().compareTo(o2.getId());
}

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