EJB中的事务方法(使用CMT):
public boolean delete(Entity entity) {
Entity managedEntity = entityManager.getReference(Entity.class, entity.getId());
entityManager.remove(managedEntity);
return !entityManager.contains(managedEntity);
}
假设刚刚从数据库中删除了指定的实体。在下一次调用delete()
方法时,客户端不知何故再次发送相同的分离实体。因此,getReference()
方法应抛出javax.persistence.EntityNotFoundException
。但是,这不会发生,因为getReference()
方法返回未初始化的惰性代理。只要代理可用,就会返回代理实例。不必要地发出DELETE
DML语句,并通过返回对用户体验不利的真实布尔值来错误地通知客户端。
这不应该发生。在下一次调用delete()
时,应该抛出javax.persistence.EntityNotFoundException
,进行充分处理,并且应该警告客户端不存在该实体。
我认为唯一的方法是使用find()
方法,但在这种情况下没有必要,因为不需要访问或修改实体的状态 - 不需要从数据库加载实体的状态。是什么方式,只使用find()
方法?