【问题标题】:JPA EntityManager why merge() does not make the instance managed?JPA EntityManager 为什么 merge() 不使实例托管?
【发布时间】:2012-05-25 13:20:46
【问题描述】:

当我对一个对象调用 merge() 时,该对象不会成为托管对象。而是返回对同一实体的托管实例的引用。这背后的逻辑是什么?有没有办法通过一些设置来改变这种行为(并使对象管理)?我正在使用 OpenJPA 2.2。谢谢。

【问题讨论】:

  • 您的意思是 EntityManager 的 L1 缓存已经有一个具有标识的托管对象,并且您合并了一些具有相同标识的分离对象并返回已经托管的对象?还是您的意思是当合并发生时,L1 缓存中还没有具有该标识的实例,因此它创建了新的托管对象?

标签: jpa openjpa entitymanager


【解决方案1】:

关键是 merge() 没有将对象附加到 EntityManager 上下文,它正在返回附加对象。所以,如果我们有:

AEntity a2 = entityManager.merge(a1);

a1 保持不受管理,而 a2 受管理。

顺便说一句,这是一种聪明的方法,因为合并不会引起副作用,传递的对象状态不会改变。

【讨论】:

  • 谢谢你,皮奥特。我想这里的想法是避免副作用。我担心我没有正确使用它。
猜你喜欢
  • 2019-03-30
  • 2010-11-07
  • 1970-01-01
  • 1970-01-01
  • 2019-06-23
  • 2012-01-27
  • 2020-11-26
  • 2012-10-20
  • 1970-01-01
相关资源
最近更新 更多