【问题标题】:JPQL Update Entities In LoopJPQL 在循环中更新实体
【发布时间】:2015-01-07 11:56:07
【问题描述】:

我有一个函数应该循环遍历 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.persist(invItem) 或 em.merge(invItem) 或类似的东西?
  • 我试过了,但是 em.persist() 插入了一个新的 InventoryItem 而不是更新它。
  • 刚刚看到你的编辑,merge() 工作了,谢谢

标签: jpa entity jpql persist


【解决方案1】:

缺少 em.merge() 来向实体管理器发出您想要保留更改的信号

【讨论】:

    猜你喜欢
    • 2014-02-04
    • 1970-01-01
    • 1970-01-01
    • 2013-01-28
    • 2014-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多