gpt4 book ai didi

java - JPA EclipseLink 添加/更新实体

转载 作者:行者123 更新时间:2023-12-01 15:03:59 25 4
gpt4 key购买 nike

我对 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();
}

其中emEntityManager的实例。

contains 再次是服务器端的一个方法,它将询问实体管理器当前持久上下文中是否存在给定实体。

上面的代码在我的表中创建了两行,第一行的值为“test”,另一行的值为“test2”,这不是我想要的。

我想创建一个值为“test”的新行,然后在创建该行后立即更新它并将其值设置为“test2”。在两次调用 save 后,我打印出了 contains 的返回,两次都返回 false

我猜问题出在第一次调用save之后我的实体不是持久上下文的一部分,所以当我再次调用save时,该实体经理认为这是一个新实体并创建一个新行。

如何实现这个更新过程?

最佳答案

一些事情。首先,为什么在序列化实例时需要使用 merge() ,为什么?如果您只是编辑从持久性上下文返回的对象,则不需要进行任何合并或保存。

如果您需要将对象编辑为序列化或分离的,那么对于新对象,您需要从保存中返回该对象的 Id,这将链接分离的对象与托管对象。理想情况下,您应该在编辑对象之前执行 find() 来获取对象。

关于java - JPA EclipseLink 添加/更新实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13230109/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com