【发布时间】: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() 工作了,谢谢