親子関係があります。
この関係は、親が一連の子を持つことができ、子が一連の親を持つことができるようなものです。
ある時点で、親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になりました。
ここでの私の質問は、merge() を実行したときにキャッシュが更新されなかったのはなぜですか?
上記のコードを少し変更しました:
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として)
ここで何が起こっているのか誰か教えてもらえますか?