删除JPA

时间:2015-07-12 06:00:44

标签: hibernate jpa eclipselink

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()方法?

0 个答案:

没有答案