У меня возникает следующая проблема с приложением REST, которое я пытаюсь разработать: в одном из моих классов обслуживания у меня есть метод для удаления объекта из моей базы данных при уведомлении пользователя, если этот ресурс не существует, аналогичноследующее:
@Transactional
public class MyEntityService {
@Autowired
private MyEntityrepository repo
public void delete(String name) {
MyEntity e = repo.findByName(name)
.orElseThrow(() -> new ResourceNotFoundException(name));
repo.delete(e);
}
}
Есть ли какой-нибудь удобный для меня способ убедиться, что вызовы метода "нет" перекрываются с тем же объектом, что и их цель?Я подумал об использовании метода блокировки EntityManagers (https://www.objectdb.com/api/java/jpa/EntityManager/lock_Object_LockModeType), примерно так:
MyEntity e = repo.findByName(name)
.orElseThrow(() -> new ResourceNotFoundException(name));
try {
em.lock(e, LockModeType.PESSIMISTIC_WRITE)
} catch ( PessimisticLockException e) {
//Handle somehow
}
repo.delete(e);
Но я не уверен, что это правильный путь, или что произойдет, если я попытаюсь удалить родительский объект, которыйкаскадирует его удаление в заблокированную сущность.