Hola Jerónimo,
Sí, cuando llamas a em.find(Producto.class, 1l)
, JPA realiza una consulta a la base de datos y recupera el producto con el id 1. Este producto se convierte en un objeto gestionado por el contexto de persistencia, lo que significa que cualquier cambio que hagas en el objeto será rastreado por JPA.
Cuando cambias la descripción a "Test 1" y luego llamas a em.flush()
, JPA sincroniza el estado del objeto con la base de datos, pero el objeto sigue siendo gestionado, es decir, cualquier cambio posterior seguirá siendo rastreado.
Luego, cambias la descripción a "Test 2" y llamas a em.merge(producto)
. En este punto, JPA verifica si hay alguna diferencia entre el estado actual del objeto y el estado de la base de datos. Como has llamado a flush()
después de cambiar la descripción a "Test 1", no hay ninguna diferencia y por lo tanto, no se realiza ninguna operación.
Finalmente, cambias la descripción a "Test 3" y llamas a em.getTransaction().commit()
. Como el objeto sigue siendo gestionado, JPA detecta que la descripción ha cambiado desde el último flush()
y actualiza la base de datos con el nuevo valor.
Por lo tanto, la descripción final en la base de datos será "Test 3", que es la opción B.
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