Si desea cambiar una entidad, puede buscar la instancia, actualizar la instancia y todas las entidades referenciadas, y confirmar la transacción.
public static void updateCustomerOrder(EntityManager em) {
em.getTransaction().begin();
Order order = (Order) em.find(Order.class, "ORDER_1");
processDiscount(order, 10);
Customer cust = order.customer;
cust.phoneNumber = "5075551234";
em.getTransaction().commit();
}
public static void processDiscount(Order order, double discountPct) {
for(OrderLine line : order.lines) {
line.price = line.price * ((100-discountPct)/100);
}
}
Al desechar la transacción se sincronizan todas las entidades gestionadas con la memoria caché. Cuando se confirma una transacción, automáticamente se produce un desecho.
En este caso, el pedido pasa a ser una entidad gestionada. Todas las entidades a las que se hace referencia desde el pedido, cliente y el elemento de pedido también pasan a ser entidades gestionadas. Cuando la transacción se desecha, se comprueba cada una de las entidades para determinar si se han modificado. Aquéllas que se han modificado se actualizan en la memoria caché. Una vez que se ha completado la transacción, confirmándose o retrotrayéndose, las entidades pasan a estar desconectadas y todos los cambios que se realizan en las entidades no se reflejan en la memoria caché.