1
respuesta

URGENTE - NO PUEDO DORMIR CON ESTA DUDA

Tengo el siguiente código:

private static void registrarProducto() {
        Categoria celulares = new Categoria("CELULARES");
        Producto celular = new Producto("Samsung","Teléfono usado",new BigDecimal("1000"),celulares);
        
        EntityManager em = JPAUtils.getEntityManager();
        
        ProductoDao productoDao = new ProductoDao(em);
        CategoriaDao categoriaDao = new CategoriaDao(em);
        
        em.getTransaction().begin();
        
        em.persist(celulares);
        em.persist(celular);
        
        em.flush();
        em.clear();
        
        celular = em.merge(celular);
        celular.setDescripcion("Teléfono nuevo");
        
        em.flush();
        em.close();
    }

Donde persisto la categoria y producto, luego hago un flush y luego realizo la actualización del producto (en estado managed, gracias al merge), sin embargo cuando ejecuto el siguiente main es como si no hubiera agregado nada a la base de datos (tampoco tengo un Excepcion):

public static void main(String[] args) {
        registrarProducto();
        EntityManager em = JPAUtils.getEntityManager();
        ProductoDao productoDao = new ProductoDao(em);
        
        List<Producto> productos = productoDao.consultarTodos();
        System.out.println("Número de productos: " + productos.size());
    }

El resultado es el siguiente (Número de productos: 0):

Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidad

1 respuesta

Hola Javier,

Sí, estás realizando correctamente las operaciones de persistencia y actualización de tus entidades. Sin embargo, observe que te falta realizar el "commit" de la transacción después de hacer el "merge" y cambiar la descripción del producto.

El "commit" es esencial para confirmar las operaciones realizadas en la base de datos. Sin él, las operaciones no se reflejarán en la base de datos, lo que podría explicar por qué no estás viendo ninguna adición en la base de datos.

Aquí te dejo un ejemplo de cómo debería verse tu código con el "commit" incluido:

private static void registrarProducto() {
    Categoria celulares = new Categoria("CELULARES");
    Producto celular = new Producto("Samsung","Teléfono usado",new BigDecimal("1000"),celulares);
    
    EntityManager em = JPAUtils.getEntityManager();
    
    ProductoDao productoDao = new ProductoDao(em);
    CategoriaDao categoriaDao = new CategoriaDao(em);
    
    em.getTransaction().begin();
    
    em.persist(celulares);
    em.persist(celular);
    
    em.flush();
    em.clear();
    
    celular = em.merge(celular);
    celular.setDescripcion("Teléfono nuevo");
    
    em.flush();
    em.getTransaction().commit(); // Aquí se realiza el commit
    em.close();
}

Por favor, intenta agregar esta línea a tu código y vuelve a ejecutar tu programa. Esto debería resolver tu problema y permitirte ver los cambios en la base de datos.

Mucho éxito en todo lo que te propongas y si tienes alguna duda aquí estaremos para apoyarte.

¡Vamos juntos!

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