Hibernate Entitymanager优雅地删除无异常?

时间:2010-12-02 11:59:24

标签: java jpa

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

void remove(String id) {
    T model = entityManager.getReference(type, id);
    entityManager.remove(model);
}

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

我可以:

void remove(String id) {
    T model = retrieve(id);
    if(model != null)
        entityManager.remove(model);
}

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

在删除实体之前,您可以执行select count(*) from ENTITY where id = :id,然后检查实体是否存在于数据库中。所以你可以毫无例外地删除。如果您使用通用方法,例如find()persist()remove() ...,则可以在count(*)方法中添加remove()查询。< / p>

希望它有所帮助。