簡體   English   中英

如何使用Tinkerpop Frames將類綁定到頂點,並且還具有綁定到Edge屬性的屬性?

[英]How to bind a class to a Vertex and also have a property bound to an Edge property using Tinkerpop Frames?

我想有一個Java類來綁定此關系:

頂點-關系-頂點(a:子句)-[r:HasClause]-(b:子句)

問題在於,“ 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);
}

謝謝

我不知道是否有一種方法可以使用@Adjacency注解(我看不到任何方法)。

一種方法是使用@JavaHandlerClass 基本上,這使您可以自定義Frame方法的實現。 在下面的示例中,我們將連接兩個Vertex ,並向Edge添加一個自定義屬性'alias'。

為了使事情變得更簡單,我將使用另一個問題中的相同類- 為什么簡單設置然后繼續使用動態代理不會持久化? (使用TinkerPop Frames JavaHandler)

IVert

@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'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM