Я пытаюсь получить список удаленных сущностей в операции базы данных, чтобы реализовать пользовательский аудит. К сожалению, недостаточно просто переопределить метод remove
для EntityManager
из-за каскадного удаления.
Мне удалось найти новые и обновленные сущности, используя EntityManager
и его UnitOfWorkChangeSet
. Любопытно, что список удаленных объектов всегда пуст.
Я подозреваю, что способ, которым клиент вызывает метод, является проблематичным, но я не совсем уверен. Клиент удаляет элементы из коллекции сущностей сущности, удаляя их из объекта и затем вызывая метод persist
с сущностью, содержащей коллекцию. Этот подход работает с точки зрения удаления объектов из базы данных с использованием каскадного механизма, но я не могу найти удаленные объекты в списке удаленных объектов.
Доступ к удаленным объектам в наборе изменений:
Map<ObjectChangeSet, ObjectChangeSet> deletedObjects =
entityManager.unwrap(UnitOfWork.class)
.getCurrentChanges()
// returns always an empty list
.getDeletedObjects();
return deletedObjects.values().stream()
.map(v -> v.getUnitOfWorkClone())
.collect(Collectors.toList());
Этот код выполняется каждый раз, когда вызывается метод persist
. Всегда возвращает пустой список.
Почему getDeletedObjects()
всегда возвращает пустой список и когда объект добавляется в этот список?