Как привязать класс к вершине, а также привязать свойство к свойству 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'