JPQL更新实体循环

时间:2014-11-11 02:07:17

标签: jpa entity jpql persist

我有一个函数应该循环遍历OrderItems列表并更新数据库中每个相应InventoryItem的数量,但它不起作用。没有错误,但库存项目数量不会被更新。

public void completeOrder(Users user, Orders order)
{
    List<OrderItem> orderItems = getOrderItems(user, order);
    EntityManagerFactory emf = Persistence.createEntityManagerFactory("Assignment2PU");
    EntityManager em = emf.createEntityManager();

    for (OrderItem item : orderItems)
    {
        em.getTransaction().begin();
        InventoryItem invItem = item.getInventoryItem();
        System.out.println("decreasing " + invItem.getItemName() + ": " + invItem.getItemQty() + " by " + item.getQty());
        int newQty = invItem.getItemQty() - item.getQty();
        invItem.setItemQty(newQty);

        em.getTransaction().commit();
    }        
}

我理解它的方式,em.getTransaction().begin();打开事务,我做了一些更改,然后em.getTransaction().commit();会将这些更改保存到数据库中。这是不正确的吗?

1 个答案:

答案 0 :(得分:0)

它缺少em.merge()来通知实体管理器您要保留更改