我有亲子关系。
这种关系是这样的,Parent可以有一组孩子,而Child可以有一组父母。
在某一时刻,来自父P1的子C1被移除并分配给另一个父P2。
我正在做的是:
Parent p1 = myDao.getParent(p1_oid);
Child c1 = p1.getChild(child_oid);
p1.removeChild(c1);
Parent p2 = myDao.getParent(p2_oid);
p2.addChild(c1);
myDao.merge(p1);
myDao.merge(p2);
这段代码正确地更新了我的数据库表。但是在我的代码中,当我使用myDao.getAllChild()检索子集时, C1的父级仍然是P1而不是P2。
缓存区域的timeToLiveSeconds是600,我可以看到,如果我检索子集,恰好在 10 分钟(600 秒)之后,父级会正确更新,即c1的父级现在是p2。
我的问题是为什么当我执行合并()时缓存没有更新?
我将上面的代码更改为:
Parent p1 = myDao.getParent(p1_oid);
Child c1 = p1.getChild(child_oid);
p1.removeChild(c1);
Parent p2 = myDao.getParent(p2_oid);
//added this line.
c1.addParent(p2);
p2.addChild(c1);
myDao.merge(p1);
myDao.merge(p2);
现在,当我执行 myDao.getAllChild() 时,我可以获得更新的子集。(即,以C1的父级为P2)
有人能告诉我这里发生了什么吗?