¿Existe alguna forma más elegante de evitar javax.persistence.EntityNotFoundException
al llamar al EntityManager.remove()
en un objeto que puede o no existir actualmente en estado persistente? Estoy tratando de evitar una situación en la que necesito hacer 2 consultas para eliminar un objeto. Actualmente estoy haciendo trampa con:Hibernate Entitymanager eliminar elegantemente sin excepción?
void remove(String id) {
T model = entityManager.getReference(type, id);
entityManager.remove(model);
}
Pero esto arrojará una excepción si el modelo no existe.
pude:
void remove(String id) {
T model = retrieve(id);
if(model != null)
entityManager.remove(model);
}
Pero eso implicaría 2 consultas (dejando de lado la noción de una memoria caché por ahora).
He votado por la captura de la excepción. A pesar de lo que dice la gente, la forma en que el sol ha programado a la api principal de Java, muchas veces una captura de prueba durante la ejecución normal está absolutamente bien. Justo el otro día encontré la fila 294 en 'ClassLoader.loadClass()' tratando de atrapar una excepción esperada en una clase * very * core. –
Supongo que una excepción es igual de rápida/rápida que una consulta adicional en un MySQL db. – Finbarr
Si tiene a mano la referencia del objeto, solo llame a entityManager.contains (obj); si devuelve false, ya lo habrá eliminado. (Esto no funcionará si solo tiene el ID, o puede haberlo eliminado en un contexto de persistencia diferente, obviamente, en cuyo caso una instrucción de eliminación de JPQL funcionaría). – JesperSM