Si vous souhaitez modifier une entité, vous pouvez rechercher l'instance, mettre à jour cette instance ainsi que toute entité référencée et valider la transaction.
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);
}
}
Le vidage de la transaction synchronise toutes les entités gérées avec le cache. Lorsqu'une transaction est validée, un vidage se produit automatiquement. Dans ce cas, l'instance Order devient une entité gérée. Toutes les entités référencées depuis les instances Order, Customer et OrderLine deviennent également des entités gérées. Lorsque la transaction est vidée, chaque entité est vérifiée afin de déterminer si elle a été modifiée. Les entités modifiées sont mises à jour dans le cache. Une fois la transaction terminée, après sa validation ou son annulation, les entités sont détachées et les modifications qui y sont apportées ne sont pas reflétées dans le cache.