首页 > 解决方案 > OSGI 环境中的 JPA - 使实体管理器保持同步

问题描述

我有一个 osgi equinox env,希望利用 eclipselink jpa 进行实体持久性。我不清楚一些事情。首先,应该为我们的解决方案创建何时\何处\多少个实体管理器?其次,如果超过 1 个,我如何让这些实体管理器保持同步?

我有一个与子实体具有双向 1..N 关系的父实体。父母可以没有孩子,孩子也可以没有父母。我有一个允许我编辑/添加/删除/...父实体的父服务。我有一个子服务,允许我编辑/创建/删除/addToParent/removeFromParent/...子实体。

To handle the bi directional associations-
Add child to parent:
Parent p = em.getReference(Parent.class, parentId);
p.addChild(child);
beginTransaction();
persist(child);
commitTransaction();


Remove child from parent:
beginTransaction();
Parent p = child.getParent();
p.removeChild(child);
commitTransaction();

现在,我认为每个希望持久化实体的服务包都会在激活时创建一个 EntityManager,并在停用时将其拆除。

因此,当我创建父实体时,父服务会处理这些事务。如果我创建父 1,则父服务知道父 1,db 也是如此。但是,子服务不知道 parent1。此外,如果我有一个 parent1,并向其中添加一个 child1,则子服务知道添加的 child1。但是,如果我要求父服务让我获得 parent1,它不会看到 child1。

看来 entityManagers 不同步,但我不知道这些应该如何保持同步,或者设计完全错误?

标签: jpaosgi

解决方案


推荐阅读