2015-04-22 50 views
0

我在orientDB中有几个节点,我想在它们之间的边上有约束。例如,我有一个节点类型主和一个类型奴隶,我想只有主和奴隶之间,而不是奴隶之间的边缘。OrientDB在java代码边缘创建约束

我想在master和slave之间的relationshiop上使用一个约束。这可能使用约束?

编辑:我试图这样做,但它不工作,我仍然可以添加一个指向主人的奴隶。如何在使用图形数据库时访问模式?

OrientGraph graph = new OrientGraph("remote:localhost/test"); 
    if (graph.getEdgeType("Ref") == null) { 
     graph.createEdgeType("Ref"); 
    } 
    if (graph.getVertexType("Element") == null) { 
     graph.createVertexType("Element"); 
    } 
    if (graph.getVertexType("SubElement") == null) { 
     OrientVertexType subElementVertex = graph 
       .createVertexType("SubElement"); 
     OrientVertexType elementVertex = graph.getVertexType("Element"); 
     subElementVertex 
       .createProperty("parent", OType.LINK, elementVertex) 
       .isMandatory(); 
    } 

我用它来创建我的顶点和边:

Vertex page3 = graph.addVertex("class:Element"); 
Vertex doc1 = graph.addVertex("class:SubElement"); 
page3.setProperty("type", "page"); 
doc1.setProperty("type", "document"); 

Edge edge6 = graph.addEdge("class:Ref", page3, doc1, "Ref"); 
edge6.setProperty("properties", mapEdge); 
edge6.setProperty("type", "document"); 

Edge edge7 = graph.addEdge("class:Ref", doc1, page3, "Ref"); 

而这最后一个不应该工作,如果约束是正确的。

回答

1

您可以用schema做到这一点:

Master master = database.getMetadata().getSchema().createClass("Master"); 

Slave slave = database.getMetadata().getSchema().createClass("Slave"); 
slave.createProperty("parent", OType.LINK, master); 

随着图:

OrientEdgeType edge = graph.createEdgeType("MyEdge"); 
Edge e = subElementVertex.addEdge("Ref", elementVertex); 
+0

感谢,但请看到我的编辑 – Blue

+0

我似乎无法做到这一点orientdb>创建边缘旗下拥有(从Person中选择)到(从Car中选择)。我是否必须使用OCommandSQL创建类似这样的属性? – Blue

+0

您发布的示例已经是模式的编辑。要添加节点,您必须使用graph.addVertex(null)而不是graph.createEdgeType – onof