エンティティー・マネージャーのチュートリアル: エントリーの更新

エンティティーを変更する場合は、インスタンスを検出し、インスタンスと参照先エンティティーを更新し、トランザクションをコミットできます。

始める前に

手順

エントリーを更新します。 以下の例は、Order インスタンスの検索方法、このインスタンスと参照先エンティティーの変更方法、および トランザクションのコミット方法を示しています。
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);
    }
}
トランザクションをフラッシュすると、すべての管理エンティティーがキャッシュと同期化されます。 トランザクションがコミットされると、フラッシュが自動的に実行されます。 この場合は、Order が管理エンティティーとなります。 Order、Customer、および OrderLine から参照されるエンティティーも管理エンティティーとなります。 トランザクションがフラッシュされるとき、 各エンティティーは検査され、変更されているかどうかが判定されます。変更されているエンティティーは、 キャッシュ内で更新されます。コミットまたはロールバックされてトランザクションが完了した後、 エンティティーは切り離され、エンティティーで行われた変更はキャッシュに反映されません。