【发布时间】:2013-01-22 15:08:51
【问题描述】:
我正在使用 Java EE、Netbeans 和外观会话 bean 来实现 JPA 层 (eclipselink)。
例如,我有两张桌子:花园 (1) ---> 树 (n)。
(脚本A)现在,我执行这个sn-p:
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 或重新加载我的应用程序并执行这些 sn-ps,我的计数 = 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);
【问题讨论】:
-
或许值得在 gardenFacade.create() 后面插入代码
-
好的,但是是一个简单的persist()调用:getEntityManager().persist(entity);
-
看看这个great article的主题。
标签: database jpa relationship entitymanager