我正在使用 Java EE、Netbeans 和外观会话 bean 来实现 JPA 层 (eclipselink)。
例如,我有一张两张桌子:花园 (1) ---> 树 (n)。
(脚本 A)现在,我执行这个片段:
Garden mGarden = new Garden();
.....
gardenFacade.create(garden)
(脚本 B)然后:
Tree oneTree = new Tree();
oneTree.setGarden(mGarden);
treeFacade.create(oneTree);
这样,实体Tree就被正确的添加到我的数据库中了,而且外键是正确的。
(脚本 C)当我调用时:
Garden findGarden = gardenFacade.find(gardenId);
int count = findGarden.getTreeCollection().size();
我数过 = 0 !!! 如果我重新启动 glassfish 或重新加载我的应用程序并执行这些片段,我的计数 = 1。
因此,我认为这是持久性上下文同步的问题,因为如果我将脚本 B 更改为:
Tree oneTree = new Tree();
oneTree.setGarden(mGarden);
treeFacade.create(oneTree);
mGarden.getTreeCollection().add(oneTree);
gardenFacade.edit(mGarden);
一切正常!我该如何解决这个问题?
编辑:
create --> getEntityManager().persist(entity);
edit ----> getEntityManager().merge(entity);
find ----> getEntityManager().find(entityClass, id);