Является ли слияние в JPA когда-либо необходимым для присоединяемых объектов? - PullRequest
17 голосов
/ 12 сентября 2011

Верно ли, что мне никогда не нужно использовать EntityManager#merge(), если я имею дело только с присоединенными управляемыми объектами? Другими словами, вызов merge() для присоединенного управляемого объекта не имеет никакого эффекта?

Или есть обстоятельства, когда объединение будет служить цели? Я считаю, что название предполагает, что я мог бы использовать его, чтобы справиться с OptimisticLockException ...:)

Редактировать : Проще говоря, мое понимание управляемого объекта заключается в том, что изменения его свойств / полей сохраняются в БД в конце транзакции.

Ответы [ 2 ]

17 голосов
/ 12 сентября 2011

В спецификации говорится, что:

Если X является управляемым объектом, он игнорируется операцией слияния, однако операция слияния каскадно объединяется с объектами, на которые ссылаются отношения из X, если эти отношения имеютбыл аннотирован значением элемента каскада cascade=MERGE или cascade=ALL.

0 голосов
/ 06 сентября 2018

много лет спустя ....

Относительно спецификации

Если X является управляемым объектом, он игнорируется операцией слияния, однако операция слияния каскадно относится к объектам, на которые отношения от X, если эти отношения были аннотированы значение каскадного элемента cascade = MERGE или cascade = ALL аннотация.

Учтите это ...

  • Объект X управляется и имеет отношение OneToMany к объекту Y с каскад = MERGE
  • Первоначально, когда создается объект типа X, не существует связанного Y.
  • Объект X сохраняется.
  • Позже создается объект Y и добавляется ссылка на X.

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

enter image description here

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