Session s = getJcrSessionWithSimpleCredentials();
Node parent = getSomeNode(s).;
parent.addNode("firstChild","nt:unstructured");
parent.addNode("second/child","nt:unstructured");
s.save();
、s.save()
は実行されません(ラインに達することはありません)などを使用して、リポジトリへの変更は表示されません。
セッションでは、まだfirstChild
の追加が表示されます。
セッションをリフレッシュして、セッションのローカルな変更を放棄することができます。簡単な例として、
try {
Session s = getJcrSessionWithSimpleCredentials();
Node parent = getSomeNode(s).;
parent.addNode("firstChild","nt:unstructured");
parent.addNode("second/child","nt:unstructured");
s.save();
} catch (PathNotFoundException ex) {
// log the exception
// give up all unsaved changes made in your session
s.refresh(false);
}
これは単なる簡潔な例であることに注意してください。個人的には、は、ノードを保存しようとする前に親の存在を確認するだろう。PathNotFoundException
。要は、保存していない変更をあきらめたいときにセッションの更新を実行できます。キャッチブロックや条件式の枝に入れてください。 keepChanges
がfalseの場合
Javadoc for Session#refresh(boolean keepChanges)
を引用するには、この方法では、現在このSession
に記録されているすべての保留中の変更を破棄し、現在保存された状態を反映するためにすべての項目を返します。トランザクションの外部では、この状態は単に永続ストレージの現在の状態です。トランザクション内では、この状態は、保存されたがまだコミットされていない変更によって変更された永続ストレージを反映します。
トランザクションサポートについては、hereを読むことができます。
ロールバックする必要はありません。 「保存」操作では、最初のノードは作成されません。 –
私はもう一度それをテストし、最初のノードは保存されますが、2番目のノードは保存されません。 1つの訂正例外は、 "somenode/second"が存在しなくなるまで、親パスが欠落しているため、 "child"の "PathNotFoundException"です。 ノードを作成する際に、すべての変更をロールバックする必要があります。 – Dileepa
それは起こりそうにない。最初のノードが保存されたことをどのようにテストしましたか? –