我对 JPA 处理添加/更新实体的方式有点困惑。
ATM,我有这段代码:
AltContact c = new AltContact("test");
save(c)
System.out.println("ENTITY: " + contains(c));
c.setEnterpriseName("test2");
save(c);
System.out.println("ENTITY: " + contains(c));
save方法是我的应用程序服务器端的一个简单方法,它请求在 EntityManager 上进行合并:
public void save (Object e) {
em.merge(e);
em.flush();
}
其中em是EntityManager
.
contains再次是服务器端的一种方法,它将询问实体管理器是否存在于当前持久上下文中的给定实体。
上面的代码在我的表中创建了两行,第一行的值为“test”,另一行的值为“test2”,这不是我想要的。
我想创建一个值为“test”的新行,然后在创建该行之后立即更新它并将其值设置为“test2”。我在两次调用save后打印出了contains的返回,被返回了两次。false
我猜问题来自这样一个事实,即我的实体在第一次调用save后不是持久上下文的一部分,所以当我再次调用save时,实体管理器认为它是一个新实体并创建一个新行。
怎样才能实现这个更新过程呢?