Как привязать класс к вершине, а также привязать свойство к свойству Edge с помощью фреймов Tinkerpop?

Я хочу иметь класс 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);
}

Спасибо

1 ответ

Я не знаю, есть ли способ сделать это, используя @Adjacency аннотация (я не вижу никакой возможности).

Один из способов сделать это - использовать @JavaHandlerClass, Это в основном позволяет вам настроить реализацию методов вашего фрейма. В следующем примере мы примем два Vertex 's, и добавьте пользовательское свойство' alias 'к Edge,

Просто, чтобы упростить задачу, я буду использовать те же классы, что и в другом вопросе: почему простой набор, а затем переход в динамический прокси не сохраняется? (используя TinkerPop Frames JavaHandler)

IVert

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

    @JavaHandler
    public void setTestVar(IVert vert);

}

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'
Другие вопросы по тегам