with persistencia manytomany many example ejemplos ejemplo datos curso column java hibernate jpa

java - persistencia - ¿Cómo saber si una entidad está separada en JPA/Hibernate?



jpa pdf (2)

¿Hay alguna manera de consultar al JPA EntityManager si una entidad dada está separada? Esta publicación de SO está discutiendo un problema similar, pero no indica una forma de consultar el JPA EntityManager en el estado de separación de una entidad. Preferiría una forma JPA, de lo contrario, específica de Hibernate.


La respuesta de Piotr Nowicki proporciona una forma de determinar si una entidad es administrada . Para saber si una entidad se ha desconectado , deberíamos saber si se administró previamente (es decir, vino de la base de datos, por ejemplo, se persistió u obtuvo de una operación de find ). Hibernate no proporciona un "historial de estado de la entidad", por lo que la respuesta breve es que no hay una manera 100% confiable de hacerlo, pero la siguiente solución alternativa debería ser suficiente en la mayoría de los casos:

public boolean isDetached(Entity entity) { return entity.id != null // must not be transient && !em.contains(entity) // must not be managed now && em.find(Entity.class, entity.id) != null; // must not have been removed }

Lo anterior asume que em es el EntityManager , Entity es la clase de entidad y tiene un campo de id Público que es una clave primaria @GeneratedValue . (También asume que la fila con esta ID no ha sido eliminada de la tabla de la base de datos por un proceso externo en el momento posterior a la separación de la entidad).


Para verificar si la entidad dada es administrada por el PersistenceContext actual, puede usar el EntityManager#contains(-) .