我意识到JPA不能像我预期的那样工作,因为我经常在会话中结束单个实体的多个实例。
以下是研究案例:父母有一个与@OneToMany映射的子集合
用一种方法:
这里我希望C是已加载的两个实例之一(C1或C2)。我以为JPA会在当前会话中检查已经存在的实例。 但是JPA会加载一个新的C实例(无论是C1还是C2都没关系)。
所以我最终得到了两个不同的C实例。
我的问题是:这是预期的行为吗? 如果是,我如何在会话中协调我的实体实例?
欢呼声
答案 0 :(得分:2)
我该怎么办? 在一个。中协调我的实体实例 会话?
如果要将状态从实体a转移到实体b,可以执行以下操作:
entityManager.merge(a);
entityManager.refresh(b);
答案 1 :(得分:0)
我也期望从查询中返回的C实例是之前返回的C之一(假设它具有相同的txn),因为它们已经在事务中登记,这就是DataNucleus肯定会做的事情(因为它也是实现JDO,这是规范的一部分,这就是L1缓存的用途。