Hibernate Entitymanager优雅地删除无异常?

Fin*_*arr 6 java jpa

是否有一种更优雅的方法可以避免javax.persistence.EntityNotFoundException在调用EntityManager.remove()可能存在或可能不存在于持久状态的对象时?我试图避免我需要进行2次查询以删除对象的情况.目前我作弊:

void remove(String id) {
    T model = entityManager.getReference(type, id);
    entityManager.remove(model);
}
Run Code Online (Sandbox Code Playgroud)

但是如果模型不存在,这将抛出异常.

我可以:

void remove(String id) {
    T model = retrieve(id);
    if(model != null)
        entityManager.remove(model);
}
Run Code Online (Sandbox Code Playgroud)

但这将涉及2个查询(暂时不考虑缓存的概念).

Dan*_*iel 0

唯一的可能性是使用带有 DELETE 和 WHERE 子句的查询。工作正常,除了 JPA 不会对要删除的对象调用任何 @PreDelete 或 @PostDelete 操作。我想你无论如何也不希望这样,所以继续查询。如果您想调用侦听器,则必须在删除之前加载该对象(显然)。