Сохранение / обновление Hibernate Entities с отношениями «многие ко многим» - PullRequest
3 голосов
/ 12 февраля 2012

В настоящее время я пытаюсь решить проблему, заключающуюся в том, что я использую Hibernate 4 в приложении Java Swing, имея несколько взаимосвязей «многие ко многим» между сущностями.

Например, сущность Project связана с Person . Человек и Проект имеют отношения многие ко многим. Проект может быть во многих категориях , поэтому существует также отношение многие ко многим.

Person *-----* Project *-----* Category

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

void savePerson(Person p){
   Session sess = factory.openSession();
   Transaction tx = null;
   try {
       tx = sess.beginTransaction();

       // steps to be done

       tx.commit();
   }
   catch (RuntimeException e) {
       if (tx != null) tx.rollback();
   }
   finally {
       sess.close();
   }
}

Поскольку существует также коллекция из Проектов внутри Персона и коллекция из Categoy внутри Проект , который мог быть изменен, нужно ли делать рекурсивный тип сохранения (сначала сохраните / обновите все дочерние объекты, которые содержатся в коллекциях, а затем сохранить / обновить сущность Person) или мне нужно только сохранить сущность Person, а Hibernate применяет механизм сохранения / обновления ко всему дереву сущностей с Person в качестве корня? Есть лучшие практики?

1 Ответ

2 голосов
/ 12 февраля 2012

Посмотрите на CascadeType. Вы можете установить поведение операций сохранения / обновления напрямую, используя CascadeType в аннотации отношений:

@OneToMany(cascade = CascadeType.ALL)
...