无法使用Tinkerpop gremlin驱动程序3.3.1通过websocket连接向Janusgraph(cql es)添加边

无法使用Tinkerpop gremlin驱动程序3.3.1通过websocket连接向Janusgraph(cql es)添加边,gremlin,janusgraph,Gremlin,Janusgraph,添加、删除和更新顶点是可以的,但当尝试添加边时,我会遇到以下异常,说明不支持添加边。有人能建议在使用远程客户端时如何添加边缘吗?提前谢谢 java.lang.IllegalStateException:org.apache.tinkerpop.gremlin.structure.Vertex$Exceptions.edgeAdditionsNotSupported(Vertex.java:175)在org.apache.tinkerpop.gremlin.structure.util.Refer

添加、删除和更新顶点是可以的,但当尝试添加边时,我会遇到以下异常,说明不支持添加边。有人能建议在使用远程客户端时如何添加边缘吗?提前谢谢

java.lang.IllegalStateException:org.apache.tinkerpop.gremlin.structure.Vertex$Exceptions.edgeAdditionsNotSupported(Vertex.java:175)在org.apache.tinkerpop.gremlin.structure.util.ReferenceVertex.addEdge(ReferenceVertex.java:47)不支持边缘添加

链接到代码:

从远程请求返回的
顶点
对象与图形分离,并且是不可变的,因此如果您尝试执行此操作:

Vertex v = g.V(id).next()
v.addEdge(...)
当您尝试向与远程图形没有连接的不可变对象添加边时,它将失败。您应该使用Gremlin添加边,而不是直接对返回的对象进行操作:

g.V(id).addE(...).to(...)

从远程请求返回的
Vertex
对象与图形分离,并且是不可变的,因此如果尝试执行此操作:

Vertex v = g.V(id).next()
v.addEdge(...)
当您尝试向与远程图形没有连接的不可变对象添加边时,它将失败。您应该使用Gremlin添加边,而不是直接对返回的对象进行操作:

g.V(id).addE(...).to(...)

如果看不到你用来添加边缘的代码,就很难说出发生了什么。如果看不到你用来添加边缘的代码,就很难说出发生了什么。我的答案仍然是正确的——尽管我刚刚修复了代码中的一个bug。很抱歉。谢谢Florian和Stephen,我已经用代码添加了gist的链接,我相信Stephen是对的,但是他的示例语法没有解析,可能我没有使用正确的库?非常感谢您的帮助。
g.V(from.id()).next().addEdge(label,g.V(to.id()).next())由于我所述的原因而失败。当您第一次执行该操作时,
next()
将返回一个“分离的”
Vertex
,并且您不能对其调用
addEdge()
。正如我上面所示,
g.V(from.id()).addE(label).to(V(to.id()).next()
谢谢Stephen,这起了作用,但导致了一个序列化错误,我明天将不得不进一步调查:io.netty.handler.codec.DecoderException:org.apache.tinkerpop.gremlin.driver.ser.SerializationException:org.apache.tinkerpop.shade.kryo.KryoException:遇到未注册的类ID:65536序列化跟踪:ID(org.apache.tinkerpop.gremlin.structure.util.reference.ReferenceEdge)位于io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:98)该错误通常意味着您需要在服务器和客户端上对齐TinkerPop的版本。请检查您正在使用的JanusGraph版本附带的TinkerPop版本,并确保您在客户端上使用该版本。我的回答仍然正确-尽管我刚刚修复了代码中的一个错误。对此表示抱歉。谢谢Florian和Stephen,我已经用代码添加了gist的链接,我相信Stephen是对的,但是他的示例语法没有解析,可能我没有使用正确的库?非常感谢任何帮助。
g.V(from.id()).next().addEdge(label,g.V(to.id()).next();
由于我所述的原因失败。只要你先这样做
next()
您返回一个“分离的”
顶点
并且您不能对其调用
addEdge()
。只需按照上面显示的操作,
g.V(from.id()).addE(label).to(V(to.id()).next()
谢谢Stephen,这起作用了,但导致了一个序列化错误,我明天将不得不进一步调查:io.netty.handler.codec.DecoderException:org.apache.tinkerpop.gremlin.driver.ser.SerializationException:org.apache.tinkerpop.shade.kryo.kryo异常:遇到未注册的类ID:65536序列化跟踪:ID(org.apache.tinkerpop.gremlin.structure.util.reference.ReferenceEdge)位于io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:98)该错误通常意味着您需要在服务器和客户端上对齐TinkerPop的版本。请检查您正在使用的JanusGraph版本附带的TinkerPop版本,并确保在客户端上使用该版本。