У меня есть два класса: «Сервис и клиент» с ассоциацией «много-к-одному» от Сервиса до Клиента. Я хочу удалить клиента и любую службу, которая ссылается на него. Я использую JPA как ORM (с подменю Hibernate), прикрепленный к db PostgreSQL.Удаление объектов с помощью JPA с ограничениями внешнего ключа
Было бы здорово, если бы я мог определить ассоциацию таким образом, чтобы удаление Клиента каскадировалось на Службы, которые ссылаются на него. Но, возможно, я что-то недопонимаю, так как ассоциация определена с помощью @ManyToOne в сервисе, операции будут каскадом от Сервиса к Клиенту, но не наоборот?
Итак, без каскадного удаления я решил просто удалить все Службы, ссылающиеся на Клиента. Казалось, достаточно легко, за исключением того, что JPA/Hibernate хочет выполнить пакетное удаление и выполнить их в неправильном порядке! Мой код в основном запрашивает Сервисы, которые ссылаются на Клиент, вызывает сущность entityManager.remove() для каждого, а затем вызывает entityManager.remove() для Клиента. Но когда я его очищаю, я получаю исключение, что удаление из Клиента завершилось неудачно из-за ограничения внешнего ключа.
Нужно ли мне пытаться совершить удаление из Сервиса до удаления из Клиента? Я бы предпочел, чтобы мои транзакции не управлялись контейнерами, и это было бы болью в шее, чтобы заставить ее совершить.
Спасибо, Энди
Согласен, что объектная модель будет лучше, если направление было инвертировано. К сожалению, я наследую объектную модель от других и не могу оправдать ее модификацию по причинам обратной совместимости. – Andy