[英]Using Tinkerpop Frames, how do I get all of the incoming or outgoing edges of a Vertex regardless of their label?
[英]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)
@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'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.