У меня есть список родителей, у каждого из которых один-ко-многим есть список много-к-одному детям. Удаление сирот включено, и отношения ленивы.
Я использую JpaRepository
с Hibernate.
Мне нужно перемещать детей между родителями и сохранять все изменения в одной транзакции.
Работает нормально, если я загружаю список родителей, перемещаю детей между ними (обновляя обе стороны отношений) и сохраняю людей в списке по очереди в цикле, чтобы каждый человек сохранялся по-своемутранзакция.
Но когда я помещаю цикл в метод, помеченный @Transactional
, чтобы вся процедура сохранения содержалась в одной всеобъемлющей транзакции, которая откатывается в случае сбоя одного из вызовов сохранения,дети будут иногда сохраняться неправильно.
Когда я сохраняю одну за другой в отдельных транзакциях, Hibernate просто обновляет дочернюю строку, если она была перемещена из другого родителя. в родительский объект, который в данный момент сохраняется, но удаляет и повторно вставляет дочерний элемент, если он был удален из родительского элемента, который является cСрочно спасается. Я вижу, что в журналах SQL.
Когда я сохраняю в одной транзакции, это, кажется, не удается: некоторые дочерние элементы перемещаются неправильно, скорее они теряются.
Я также пыталсяиспользовать saveAll()
вместо цикла в методе @Transactional
, тот же эффект.
Перемещение детей между родителями и сохранение всех родителей в одной транзакции не поддерживается сценарием?