0

我想要一个 Java 类来绑定这种关系:

顶点 - 关系 - 顶点 (a:Clause)-[r:HasClause]-(b:Clause)

问题是类“HasClause”的边缘应该在同一个类上有一个名为“alias”的属性 - 我不知道我应该如何注释类以自动执行此操作:

@JsonDeserialize(as = Clause.class)
public interface IClause extends VertexFrame {

    @Property("nodeClass")
    public String getNodeClass();

    @Property("nodeClass")
    public void setNodeClass(String str);

    /* that would be a property on the Vertex not on the Edge 
    @Property("alias")
    public void setAlias(String id);

    @Property("alias")
    public String getAlias();
    */

    @Adjacency(label = "HasClause", direction = Direction.OUT)
    public Iterable<IClause> getClauses();

    @Adjacency(label = "HasClause", direction = Direction.OUT)
    public void setClauses(Iterable<IClause> clauses);
}

谢谢

4

1 回答 1

1

我不知道是否有办法使用@Adjacency注释来做到这一点(我看不到任何方法)。

您可以做到这一点的一种方法是使用@JavaHandlerClass. 这基本上允许您自定义 Frame 方法的实现。在下面的示例中,我们将连接两个Vertex',并将自定义属性 'alias' 添加到Edge.

只是为了让事情更容易,我将使用您其他问题中的相同类 -为什么简单设置然后获取动态代理不会持续存在?(使用 TinkerPop 框架 JavaHandler)

伊维特

@JavaHandlerClass(Vert.class)
public interface IVert extends VertexFrame {

    @JavaHandler
    public void setTestVar(IVert vert);

}

垂直

abstract class Vert implements JavaHandlerContext<Vertex>, IVert {

    public void setTestVar(IVert testVar){
        Edge edge = asVertex().addEdge('foobar', testVar.asVertex())
        edge.setProperty('alias', 'chickens')
    }

}

主要方法(Groovy)

IVert vert = framedGraph.addVertex('myuniqueid', IVert)
IVert vert2 = framedGraph.addVertex('myuniqueid2', IVert)
vert.setTestVar(vert2)
Edge e = g.getVertex('myuniqueid').getEdges(Direction.BOTH, 'foobar').iterator().next()
assert e.getProperty('alias') == 'chickens'
于 2015-04-15T01:45:37.703 回答