我想要一个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);
}
由于
答案 0 :(得分:1)
我不知道你是否可以使用@Adjacency
注释做到这一点(我无法以任何方式看待)。
一种方法是使用@JavaHandlerClass
。这基本上允许您自定义Frame方法的实现。在以下示例中,我们将加入两个Vertex
,并添加自定义属性&#39;别名&#39;到Edge
。
为了让事情变得简单,我会使用您问题中的相同课程 - Why simple set and then get on Dynamic Proxy does not persist? (using TinkerPop Frames 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')
}
}
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'