Solucionado (ver solución)
Solucionado
(ver solución)
2
respuestas

[Duda] Alguna Solución

Tengo una duda como se que ha cerrado si se alteran los datos, ya que jugando con el código indica lo mismo, gracias

package com.latam.alura.tienda.prueba;

import javax.persistence.EntityManager;

import com.latam.alura.tienda.modelo.Categoria;
import com.latam.alura.tienda.utils.JPAUtils;

public class RegistroDeProducto {

    public static void main(String[] args) {
        Categoria celulares = new Categoria("CELULARES");
        
        
        EntityManager em = JPAUtils.getEntityManager();		// se conecta antes de los Dao para evitar la duplicacion del código
                                                            // y se inicia la conexión
        
        em.getTransaction().begin();	//aca se obtienen las transacciones empezando con el metod begin
        
        em.persist(celulares);
        
        celulares.setNombre("LIBROS");
        
        //em.getTransaction().commit();  	// envia los valores que fueron configurados para esta instancia y los envia a la base de datos.
        //em.close(); 					// se cierra el registro 
        
        celulares.setNombre("SOFTWARES");
        em.getTransaction().commit();
        em.close(); 
    }

}
2 respuestas
solución!

¡Hola Erick!

Importante entender mejor cómo funcionan los ciclos de vida de las entidades en JPA, es importante conocer los diferentes estados en los que una entidad puede encontrarse. Estos estados son:

  1. Transient: Cuando creas una nueva instancia de una entidad utilizando la palabra clave "new", la entidad se encuentra en estado transiente. En este estado, la entidad no está siendo considerada para ser registrada en la base de datos.

  2. Managed: Para que una entidad pase al estado Managed, debes utilizar el EntityManager y llamar al método persist(). En este estado, la entidad es considerada para ser registrada en la base de datos. Después de realizar el commit o el flush, los valores de la entidad se sincronizan con la base de datos.

  3. Detached: Después de cerrar la transacción con el método close() del EntityManager, la entidad pasa al estado detached. En este estado, JPA no reconoce ni considera los cambios realizados en la entidad.

Si estás creando una instancia de la entidad "Categoría" llamada "celulares" y la estás persistiendo en la base de datos. Luego, estás modificando el nombre de la categoría a "LIBROS" y realizando un commit. Esto generará un insert en la base de datos para la categoría "celulares" y luego un update para cambiar el nombre a "LIBROS".

Sin embargo, después de cerrar la transacción y modificar nuevamente el nombre de la categoría a "SOFTWARES", no se realizará ningún cambio en la base de datos, ya que la entidad se encuentra en estado detached.

Es importante tener en cuenta que, en general, los cambios realizados en una entidad en estado detached no se reflejarán en la base de datos a menos que vuelvas a persistir la entidad o la vuelvas a asociar con un EntityManager en estado Managed.

Espero que esta explicación te haya ayudado a entender mejor cómo funcionan los ciclos de vida de las entidades en JPA. Pero si tienes más duda, no dudes en preguntar.

Mucho éxito en todo lo que te propongas. ¡Vamos juntos!

Si este post te ayudó, por favor, marca como solucionado ✓. Continúa con tus estudios

Hola instructora Adriana mil gracias por la información que me es de gran ayuda ya que en efecto es mejor saber como se manejan los ciclos, y quiero indicar que lo siguiente me saco de duda

  • Es importante tener en cuenta que, en general, los cambios realizados en una entidad en estado detached no se reflejarán en la base de datos a menos que vuelvas a persistir la entidad o la vuelvas a asociar con un EntityManager en estado Managed.

no me quedaba claro pero agradecido nuevamente por ello, saludo.