这是通过TinkerPop3 Java API理解DSE图中的事务语义的问题
据我所知,当您在一次交易中执行DseSession.executeGraph(String query)
时。
但是使用TinkerPop3 Java API实现相同的机制是什么? 假设我想添加一个顶点,然后删除一些边,然后添加一个新的顶点等,
我试过
g.V("{~label=company, id=12345}").drop().addV("company").property("id", "1").next()
这并没有像我预期的那样奏效。 (放弃公司并在单个交易中添加一个)。确实删除了第一个顶点,但是从未创建新公司。
我得到了以下异常
Exception in thread "main" java.util.NoSuchElementException
at com.datastax.dse.graph.internal.DseRemoteTraversal.nextTraverser(DseRemoteTraversal.java:60)
答案 0 :(得分:3)
drop()
步骤"杀死"您正在删除的遍历器,意味着drop()
没有返回任何内容。你可以看到,如果你这样做:
gremlin> g.V().has('name','marko').drop().next()
java.util.NoSuchElementException
Type ':help' or ':h' for help.
Display stack trace? [yN]
如果没有遍历器,则无法向前面的addV()
步骤前进。可能有更好的方法可以做到这一点,但是您可以通过使用inject()
添加一次性值作为遍历到addV()
的遍历来解决该问题。在这种情况下,您删除了一件事,因此您需要放回一个遍历器以触发对addV()
的单个调用:
gremlin> g.V().has('name','marko').drop().
......1> inject(1).
......2> addV('person').property('name','stephen').next()
==>v[13]
我也想知道这是否是一个很好的方法:
gremlin> g.V().has('name','marko').
......1> union(drop(),
......2> addV('person').property('name','stephen'))
==>v[13]