在一个对象上调用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个查询(暂时不考虑缓存的概念)。
答案 0 :(得分:0)
唯一的可能性是使用带有DELETE和WHERE子句的Query。工作正常,除了JPA不会对要删除的对象调用任何@PreDelete或@PostDelete操作。我认为你无论如何都不想这样,所以请使用Query。如果要调用侦听器,则必须在删除之前加载对象(显然)。
答案 1 :(得分:0)
在删除实体之前,您可以执行select count(*) from ENTITY where id = :id
,然后检查实体是否存在于数据库中。所以你可以毫无例外地删除。如果您使用通用方法,例如find()
,persist()
,remove()
...,则可以在count(*)
方法中添加remove()
查询。< / p>
希望它有所帮助。