ArangoDB图形中的非法文档密钥

ArangoDB图形中的非法文档密钥,arangodb,arangodb-java,Arangodb,Arangodb Java,我从ArangoDB开始,通过Java应用程序中的访问。在这个项目中,我需要创建一个员工集合和一个动态数量的长袜顶点,员工和这些长袜之间通过边进行连接,如图所示 在下面的代码中,我只创建了一只袜子(只需使用循环创建其他袜子)。问题是如何创建边 我已经可以创建容量和员工顶点。这些集合必须通过边缘假期连接,但我无法创建边缘 最初,我使用了解决方案1,基于。使用此代码,将三个集合创建为一个顶点,但不会创建连接员工和长袜的边 调整解决方案2的代码。基于执行createGraph()时生成的,错误:12

我从ArangoDB开始,通过Java应用程序中的访问。在这个项目中,我需要创建一个员工集合和一个动态数量的长袜顶点,员工和这些长袜之间通过边进行连接,如图所示

在下面的代码中,我只创建了一只袜子(只需使用循环创建其他袜子)。问题是如何创建边

我已经可以创建容量和员工顶点。这些集合必须通过边缘假期连接,但我无法创建边缘

最初,我使用了解决方案1,基于。使用此代码,将三个集合创建为一个顶点,但不会创建连接员工和长袜的边

调整解决方案2的代码。基于执行
createGraph()
时生成的,
错误:1221-非法文档密钥“
(请参见标记行)

我请专家帮助确定如何正确创建图表

解决方案1

ArangoDB arangoUtil = new ArangoDB.Builder()
              .serializer(new ArangoJack())
              .host(ARANGODB_HOST, ARANGODB_PORT)
              .user(ARANGODB_USER)
              .password(ARANGODB_PASSWORD)
              .useProtocol(Protocol.HTTP_JSON)
              .build();

registerStockings();
//each employee has more than one vacation record per year
for(Vacation v : listVacations){
    registerEmployees(v);
    registerVacations(v);
}


private registerStockings() throws ArangoDBException{
    BaseDocument bDoc;
    for(Stocking s : list){
        bDoc = new BaseDocument();
        bDoc.setKey(s.getUorg());
        bDoc.addAttribute("nomeLotacao", s.getNome());
        bDoc.addAttribute("descricao", s.getDescricao());
        arangoUtil.db(ARANGODB_DATABASE)
                    .collection(“Stock”)
                        .insertDocument(bDoc);
    }
}


private void registerEmployees(Vacation v) throws ArangoDBException{
    BaseDocument bDoc = new BaseDocument();
    bDoc = new BaseDocument();
    bDoc.setKey(v.getSiape());
    bDoc.addAttribute("nomeServidor", v.getNomeServidor());
    arangoUtil.db(ARANGODB_DATABASE)
        .collection("Employees")
            .insertDocument(bDoc);
}


private void registerVacations(Vacation v) throws ArangoDBException{
    BaseEdgeDocument bDoc = createEdgeValue();
    bDoc.setKey(sb.append(v.getSiape()).append("_").append(v.getDataInicio().getTime()).toString());
    bDoc.addAttribute("exercicio", v.getExercicio());
    bDoc.addAttribute("duracao", v.getDuracao());
    bDoc.addAttribute("dataInicio", v.getDataInicio());
    bDoc.addAttribute("dataFim", v.getDataFim());
    bDoc.setFrom(“Employees”);
    bDoc.setTo(“Stockings”);
    arangoUtil.db(ARANGODB_DATABASE)
                .graph(“MyGraph”)
                    .edgeCollection(“Vacations”)
                        .insertEdge(bDoc);
}

private static BaseEdgeDocument createEdgeValue(){
    VertexEntity v1 = arangoUtil.db(ARANGODB_DATABASE)
                                    .graph(“MyGraph”)
                                        .vertexCollection(“Employees”)
                                            .insertVertex(new BaseDocument(), null);
    VertexEntity v2 = arangoUtil.db(ARANGODB_DATABASE)
                                    .graph(“MyGraph”)
                                        .vertexCollection(“Stockings”)
                                            .insertVertex(new BaseDocument(), null);

    BaseEdgeDocument bed = new BaseEdgeDocument();
    bed.setFrom(v1.getId());
    bed.setTo(v2.getId());
    return bed;
}
解决方案2

ArangoDB arangoUtil = new ArangoDB.Builder()
              .serializer(new ArangoJack())
              .host(ARANGODB_HOST, ARANGODB_PORT)
              .user(ARANGODB_USER)
              .password(ARANGODB_PASSWORD)
              .useProtocol(Protocol.HTTP_JSON)
              .build();

createCollections();
registerStockings();
//each employee has more than one vacation record per year
for(Vacation v : listVacations){
    registerEmployees(v);
    registerVacations(v);
}




private void createCollections() throws ArangoDBException{
    arangoUtil.db(ARANGODB_DATABASE).createCollection(“Employees”,
                                        new CollectionCreateOptions().type(CollectionType.DOCUMENT));
    arangoUtil.db(ARANGODB_DATABASE).createCollection(“Stockings”,
                                        new CollectionCreateOptions().type(CollectionType.DOCUMENT));
    arangoUtil.db(ARANGODB_DATABASE).createCollection(“Vacations”,
                                        new CollectionCreateOptions().type(CollectionType.EDGES));
    
    List<EdgeDefinition> listEdgeDef = new ArrayList<EdgeDefinition>();
    EdgeDefinition edgeDef = new EdgeDefinition();
    edgeDef.collection(“Vacations”);
    edgeDef.from(“Employees”);
    edgeDef.to(“Stockings”);
    listEdgeDef.add(edgeDef);
    arangoUtil.db(ARANGODB_DATABASE).createGraph(“MyGraph”, listEdgeDef, null);      **** error ****
}
ArangoDB arangoUtil=new ArangoDB.Builder()
.serializer(新的ArangoJack())
.host(ARANGODB_主机、ARANGODB_端口)
.user(ARANGODB_用户)
.密码(ARANGODB_密码)
.useProtocol(Protocol.HTTP_JSON)
.build();
createCollections();
寄存器存储();
//每位员工每年都有一次以上的休假记录
对于(假期v:列出假期){
注册雇员(五);
登记处(五);
}
私有void createCollections()引发ArangoDBException{
arangoUtil.db(ARANGODB_数据库).createCollection(“员工”,
新建CollectionCreateOptions().type(CollectionType.DOCUMENT));
arangoUtil.db(ARANGODB_数据库).createCollection(“袜子”,
新建CollectionCreateOptions().type(CollectionType.DOCUMENT));
arangoUtil.db(ARANGODB_数据库).createCollection(“假期”,
新建CollectionCreateOptions().type(CollectionType.EDGES));
List listEdgeDef=new ArrayList();
EdgeDefinition edgeDef=新的EdgeDefinition();
edgeDef.集合(“假期”);
来自(“员工”)的edgeDef;
边缘至(“长袜”);
listEdgeDef.add(edgeDef);
arangoUtil.db(ARANGODB_数据库).createGraph(“MyGraph”,ListedDef,null);****错误****
}

您可以在这里找到有关从java驱动程序创建图形的示例:感谢您的回复@rashtao。我访问了这个链接,我的解决方案1是基于这个代码的(我甚至会更改帖子以引用它),但由于我没有达到我的目标,我搜索了新的来源。我会根据你的建议做进一步的测试。再次感谢。@rashtao,正如我所说,我使用了你的链接作为解决方案2的参考(我在上面的评论中说错了)。我查看了您的代码,发现它看起来非常相似,在使用
createGraph()
执行该行时,我的错误仍然存在。要知道错误发生在插入元素之前,为什么会是与非法密钥相关的错误?