Обход DELETE_ORPHANS в транзакции при перемещении объектов от одного родителя к другому, спящий режим - PullRequest
0 голосов
/ 18 июня 2009

Я использую комбинацию Spring 2.5.6 и Hibernate Annotations. У меня есть три объекта (таблицы или ж / д) на рассмотрении: клиент, адрес, заказ. Клиент имеет свойство Cascade DELETE_ORPHANS для адресов.

То, что я делаю, - это объединение клиентов, я перемещаю все адреса и заказы от одного клиента к другому, а затем устанавливаю отключенный бит для старого клиента. Я делаю это, удаляя адреса из CustB и добавляя их в CustA. Затем я сохраняю CustA с помощью .update (custA), адреса и заказы перемещаются соответствующим образом, но когда я обновляю custB с отключенным битом, он стирает мои перемещенные адреса!

Когда я комментирую DELETE_ORPHANS, он работает нормально.

Как мне остановить DELETE_ORPHANS от удаления перемещенных адресов? Не следует ли мне удалить их из custB и просто изменить их ссылку на клиента? Если я сделаю все это внутри транзакции, а не отсоединяю объекты между каждой операцией, они будут корректно обновляться с включенным DELETE_ORPHAN?

1 Ответ

0 голосов
/ 18 июня 2009

Я нашел это сообщение на форумах hibernate: https://forum.hibernate.org/viewtopic.php?f=1&t=961777&start=0

Кристиан из команды hibernate говорит о DELETE_ORPHANS как о хакере, гарантирующем hibernate, что при удалении ассоциированного объекта из объекта его можно удалить. Он говорит, чтобы использовать это экономно.

По сути, не используйте delete_orphans, если можете помочь.

Если вы решите использовать его, вам придется выполнить дополнительные запросы, которые удаляют записи, а затем заново создать их с новыми идентификаторами, прикрепленными к новым родительским объектам.

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