我意识到JPA不能像我预期的那样工作,因为我经常最终在会话中使用单个实体的多个实例.
以下是研究案例:父母有一个与@OneToMany映射的子集合
在一个方法中:
>获取父P的实例
实体
>使用P.getChilds()加载子集合:它包含C1和C2的实例
>然后找到具有优化JPA查询的特定Child,其中Parent P具有参数:Child C = dao.getSpecificChild(P)
在这里,我希望C是已经加载的两个实例之一(C1或C2).我以为JPA会在当前会话中检查已经存在的实例.
但是JPA会加载一个新的C实例(无论是C1还是C2都没关系).
所以我最终得到了两个不同的C实例.
我的问题是:这是预期的行为吗?
如果是,我如何在会话中协调我的实体实例?
干杯
最佳答案
how can I
reconcile my entity instances in a
session?
如果要将状态从实体a转移到实体b,可以执行以下操作:
entityManager.merge(a);
entityManager.refresh(b);