java hibernate jpa jpa-2.0

java - Silenciosamente ignorado remove()



hibernate jpa (1)

Hay una entidad A que hace referencia (muchos a uno) a la entidad B, con una referencia inversa (mapeada) de B a A. También hay una referencia A a C y una referencia inversa C a A. Cuando emito entityManager.remove (A ) luego flush (), "eliminar" no está gerenado! Pero tampoco hay excepciones. Es como si no se hubiera llamado a remove (). ¿Por qué sucedería eso? Si antes de remove () extraemos A de las referencias inversas B.listOfA y C.listOfA, se genera "delete" como se esperaba.

También tenga en cuenta mi otra pregunta donde llegué a la conclusión de que orphanRemoval no siempre funciona como se esperaba. Ahora estoy empezando a sospechar que tal vez la conexión en cascada funcionó bien, pero después de eso, la eliminación en cascada real fue "tragada" como describí aquí.


Echa un vistazo a esta answer . Básicamente, la especificación JPA exige que una entidad eliminada se vuelva a administrar si se le aplica la operación de persistencia.

Para verificar que esto realmente está sucediendo, habilite el nivel de registro de org.hibernate para el paquete org.hibernate y busque entradas de registro como:

un-scheduling entity deletion ...

Para evitar cualquier comportamiento impredecible, se recomienda que las referencias a entidades eliminadas se eliminen de todas las demás instancias de entidades que se cargan en la misma sesión / transacción.