Se você desejar alterar uma entidade, é possível localizar a instância, atualizar a instância e quaisquer entidades referenciadas, além de executar o commit da transação.
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);
}
}
Executar o flushing da transação sincroniza todas as entidades
gerenciadas com o cache. Quando ocorre o commit de uma transação, automaticamente
ocorre um flush. Neste caso, Order se torna uma entidade gerenciada. Quaisquer
entidades referenciadas de Order, Customer e OrderLine também se tornam entidades
gerenciadas. No flush da transação, cada entidade é verificada para determinar se
foi modificada. As que foram modificadas são atualizadas no cache. Após a conclusão
da transação, através de commit ou rollback, as entidades se separam e quaisquer
alterações feitas nas entidades não são refletidas no cache.