基本的にプロパティを更新し、すべての古いIsOfType
エッジを削除して新しいエッジを追加するこのコードがありますIsOfType
(すべてのメソッド/クラスの抽象化を削除してインラインにした場合):
traversal = g.V("Entity:633471488:519").as("entity");
//update properties
traversal.property("text", "new text");
traversal.property("description", "new description");
//drop typeEdges
traversal.select("entity").outE("IsOfType").drop();
//even that causes the same issue(!): traversal.select("entity").outE("HasInner").drop();
System.out.println("traversal after type edges deletion: " +traversal);
//make new typeEdges
traversal.V("Entity:996942848:518").as("type-0").addE("IsOfType").from("entity").to("type-0");
System.out.println("traversal after type edges addition: " +traversal);
//storage
traversal.select("entity").forEachRemaining({})
すべてが機能します (既存のIsOfType
エッジのドロップも)。しかし、新しいエッジを作成IsOfType
しても、グラフに新しいエッジが作成されるようには見えません。ドロップをコメントアウトすると、作成は正常に機能します (!) まるで のDropStep
前にあるaddEdgeStep
が最後に起こっているかのようです。他のタイプのエッジをドロップしようとしましたが、同じ問題が発生しています (!)。暗黙のトランザクション処理がコミットを決定している可能性がありますdrop()
。その場合、Fluent API を使用して同じトランザクション内でドロップと作成を行うことはできず、実際のアプリケーションではあまり役に立ちません:(next()
iterate()
forEachRemaining()
削除後、および私の実行で 2 つのエッジを追加した後のトラバーサルの状態を次に示しますIsOfType
(Java と Datastax Studio コンソールの両方を試しました)。
traversal after type edges deletion:
[
GraphStep(vertex,[Entity:633471488:519])@[entity],
AddPropertyStep({value=[Entity], key=[atClass]}),
AddPropertyStep({value=[FilmWithSuperCategories aaa], key=[text]}),
AddPropertyStep({value=[dffsdfsd f2313], key=[description]}),
SelectOneStep(entity)@[entity],
VertexStep(OUT,[IsOfType],edge),
DropStep
]
traversal after type edges addition:
[
GraphStep(vertex,[Entity:633471488:519])@[entity],
AddPropertyStep({value=[Entity], key=[atClass]}),
AddPropertyStep({value=[FilmWithSuperCategories aaa], key=[text]}),
AddPropertyStep({value=[dffsdfsd f2313], key=[description]}),
SelectOneStep(entity)@[entity],
VertexStep(OUT,[IsOfType],edge),
DropStep,
GraphStep(vertex,[Entity:996942848:518])@[type-0],
AddEdgeStep({~from=[[SelectOneStep(entity)]], ~to=[[SelectOneStep(type-0)]], label=[IsOfType]}),
GraphStep(vertex,[Entity:1489781376:516])@[type-1],
AddEdgeStep({~from=[[SelectOneStep(entity)]], ~to=[[SelectOneStep(type-1)]], label=[IsOfType]})
]
編集
ここで読んだことから(http://tinkerpop.apache.org/docs/current/reference/#drop-step)
drop()-step (filter/sideEffect) は、要素とプロパティをグラフから削除する (つまり、削除する) ために使用されます。トラバーサルで発信オブジェクトが生成されないため、これはフィルター ステップです。
返されるオブジェクトがないため、ドロップが発生した後に何もすることはできません! DSE Graph Fluent APIを使用して、単一のトランザクションで複数の削除/追加を行う方法に興味があります
ありがとう!