这是一个通过TinkerPop3 Java理解DSE图中事务语义的问题。
正如我所理解的,当您在单个事务中执行DseSession.executeGraph(String query)时。
但是使用TinkerPop3 Java实现相同目标的机制是什么呢?假设我想要添加一个顶点,然后删除几个边,然后添加一个新的顶点等等,
我试过了
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)发布于 2018-03-14 11:04:38
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]https://stackoverflow.com/questions/49254489
复制相似问题