Una de las cosas mas importantes a entender en JPA son los distintos estados de las entidades que manejamos. JPA soporta 4 estados (new ,managed,detached,removed) .
New : Es el estado en el que se encuentra un objeto una vez construido . No esta asociado a ningún PersistenceContext. Se trata de un objeto normal.
Managed: Es el estado en el que se encuentra una entidad que esta asociada a un PersistenceContext y almacenada en base de datos via EntityManager. Es el caso de invocar por ejemplo el método persist() de un EntityManager sobre un objeto nuevo.
Detached: Es el estado en el cual se encuentra una entidad que ha estado asociada al PersistenceContext y deja de estarlo.
Removed: Es el estado en el cual se encuentra una entidad que esta todavia controlada por el PersistenceContext pero va a ser eliminada de la base de datos.
EntityManager y PersistenceContext
Vamos a ver a continuación los métodos mas importantes a nivel de EntityManager para cambiar una entidad de estado .
persist(). Se encarga de cambiar el estado de un objeto que esta en el estado new al estado managed y asociarlo al PersistenceContext.
remove(): Se encarga de pasar el estado de de un objeto de managed a removed eliminandolo de la base de datos.
detach() :Se encarga de convertir un objeto managed en un objeto detach. Mantiene su identidad de persistencia pero no esta ya asociado al PersistenceContext.
merge() : Se encarga de convertir un objeto nuevo o detached en un nuevo objeto managed .La diferencia fundamental con persist() es que este asume que el objeto no existe en la base de datos previamente . Algo que si puede ocurrir con el metodo marge
Muy bien explicado, un poco lio el Merge pero tratare de entenderlo con el Merge de Suversion
Buen artículo!!!
gracias 🙂
[…] artículos relacionados : Introducción a JPA , EntityManager , Introducción a […]
[…] ArquitecturaJava : Ejemplo de uso EntityManager […]
explicado muy bien y conciso!!
gracias 🙂