Jpa 循环中的JPQL更新实体

Jpa 循环中的JPQL更新实体,jpa,entity,jpql,persist,Jpa,Entity,Jpql,Persist,我有一个函数,它应该循环遍历OrderItems列表并更新数据库中每个对应InventoryItem的数量,但是它不起作用。没有错误,只是没有更新库存项目数量 public void completeOrder(Users user, Orders order) { List<OrderItem> orderItems = getOrderItems(user, order); EntityManagerFactory emf = Persistence.create

我有一个函数,它应该循环遍历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;将这些更改保留到数据库中。这不正确吗?

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

可能您需要em.persistinvItem或em.mergeinvItem或类似的东西?我尝试过,但是em.persist插入了一个新的InventoryItem而不是更新它。刚刚看到您的编辑,merge工作正常,谢谢