【发布时间】:2018-10-15 14:12:01
【问题描述】:
我正在尝试开发的 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);
}
}
我有什么方便的方法可以确保对 delete 方法的调用不与目标相同的实体重叠?我考虑过使用 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);
但我不确定这是否是正确的方法,或者如果我尝试删除将其删除级联到锁定实体的父实体会发生什么。
【问题讨论】:
标签: java spring hibernate spring-boot jpa