在带有蓝图/Tinkerpop的OrientDb中创建边缘的问题 [英] Issue with creating edge in OrientDb with Blueprints / Tinkerpop

查看:219
本文介绍了在带有蓝图/Tinkerpop的OrientDb中创建边缘的问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我最近正在尝试学习OrientDb,现在我对OrientDb控制台本身有些熟悉,因此我将继续使用Blueprints编写一个简单的Java程序来创建图形.我试图在它们之间创建一些顶点和边,但是尽管成功创建了我的顶点,但除非调用两次创建方法,否则我将看不到边.如果我注释掉其中一个调用,则不会创建任何边缘.我尝试通过增加睡眠时间来检查任何计时问题,但似乎无济于事.

I am recently trying to learn OrientDb and now that I am somewhat familiar with the OrientDb console itself I am moving on to using Blueprints to write a simple java program to create a graph. I am trying to create a few vertices and edges between them, but although my vertices are created successfully, I am unable to see my edges unless I call the method for creation twice. If I comment out one of the calls, none of the edges are being created. I tried checking for any timing issues by adding sleep times, but nothing seems to help.

我尝试使用控制台进行检查,但看到了创建的顶点,但没有看到边缘.我正在为Orient运行1.7 rc-1.

I tried to check using the console and I see the vertices created but not the edges. I am running 1.7 rc-1 for orient.

这是我要开始工作的示例代码:

Here is the sample code I am trying to get working:

public class OrientPrototype {
    static OrientGraph graph = new OrientGraph("remote:localhost/Tinker", "admin", "admin");

    public static void main( String[] args ) {

        removeAllExistingVerticesAndEdges();

        createSimpleGraph();

        displayAllVertices(getAllVertices("Person"), "name");

        displayAllEdges(getAllEdges("Friend"));
    }

    private static void removeAllExistingVerticesAndEdges() {
        for (Vertex v : graph.getVertices())
            v.remove();

        for (Edge e : graph.getEdges())
            e.remove();
    }

    private static void createSimpleGraph() throws InterruptedException {

        createPersons();

        createFriendships();
        //createFriendships();
    }

    private static void createPersons() {
        String [] persons = {"John", "Jack", "Ryan"};

        if (graph.getVertexType("Person") == null)
            graph.createVertexType("Person");

        for (int i = 0; i < persons.length; i++) {
            try {
                Vertex v = graph.addVertex("class:Person");
                v.setProperty("name", persons[i]);
                graph.commit();
            }
            catch (Exception e) {
                graph.rollback();
                System.out.println("Error while creating the persons. Had to roll back");
            }
        }       
        System.out.println("Done creating vertices...");
    }

    private static void createFriendships() {
        if (graph.getEdgeType("Friend") == null) {
            graph.createEdgeType("Friend");
            graph.commit();
        }

        Map<String, Vertex> vertices = new HashMap<String, Vertex>();
        for (Vertex v : graph.getVertices())
            vertices.put(v.getProperty("name").toString(), v);

        try {
            graph.addEdge("class:Friend", vertices.get("John"), vertices.get("Jack"), "is friend");
            graph.addEdge("class:Friend", vertices.get("Jack"), vertices.get("Ryan"), "is friend");
            graph.addEdge("class:Friend", vertices.get("Ryan"), vertices.get("John"), "is friend");


            graph.commit();
            System.out.println("Done creating edges...");

        }
        catch (Exception e) {
            graph.rollback();
            System.out.println("Error while creating the edges between persons. Had to roll back");
        }
    }

    private static Iterable<Vertex> getAllVertices(String classname) {
        return graph.getVerticesOfClass(classname);
    }

    private static void displayAllVertices(Iterable<Vertex> it, String propertyName) {
        System.out.println("The vertices in the graph are:");
        for (Vertex v: it)
            System.out.println(v + " " + v.getProperty("name"));
    }

    private static Iterable<Edge> getAllEdges(String classname) {
        return graph.getEdgesOfClass(classname);
    }

    private static void displayAllEdges(Iterable<Edge> it) {
        System.out.println("The edges in the graph are:");
        for (Edge e: it)
            System.out.println(e);
    }
}

我不认为自己做错了什么,因为当我查看OrientDb的控制台时,当我单次调用createEdge方法时,在Friend类的架构"选项卡中没有看到任何Edge吗?但是,这些确实会在第二个呼叫之后出现.此外,当我在Person类上运行Person查询中的select时,我还会看到到Person类的传入和传出链接.这些传入和传出链接仅在我至少调用一次createEdge方法时出现.

I do not believe that I am doing something wrong because when I look at the console for OrientDb, I do not see any Edges in the Schema tab for class Friend when I make the single call to createEdge method? These do appear however after the second call. Moreover I also see the incoming and outgoing links to the Person class when I run a select from Person query on the Person class. These incoming and outgoing links appear only when I call the createEdge method at least once.

任何帮助将不胜感激.如果有帮助,还可以附加我的maven pom文件中的依赖项:

Any help is greatly appreciated. Also attaching the dependencies from my maven pom file if it is of any help:

<dependencies>
    <dependency>
        <groupId>com.tinkerpop.blueprints</groupId>
        <artifactId>blueprints-orient-graph</artifactId>
        <version>2.5.0-SNAPSHOT</version>
    </dependency>
    <dependency>
        <groupId>com.tinkerpop.gremlin</groupId>
        <artifactId>gremlin-java</artifactId>
        <version>2.5.0-SNAPSHOT</version>
    </dependency>
    <dependency>
        <groupId>com.orientechnologies</groupId>
        <artifactId>orient-commons</artifactId>
        <version>1.7-rc1</version>
    </dependency>
    <dependency>
        <groupId>com.orientechnologies</groupId>
        <artifactId>orientdb-core</artifactId>
        <version>1.7-rc1</version>
    </dependency>
    <dependency>
        <groupId>com.orientechnologies</groupId>
        <artifactId>orientdb-client</artifactId>
        <version>1.7-rc1</version>
    </dependency>
    <dependency>
        <groupId>com.orientechnologies</groupId>
        <artifactId>orientdb-object</artifactId>
        <version>1.7-rc1</version>
    </dependency>
    <dependency>
        <groupId>com.orientechnologies</groupId>
        <artifactId>orientdb-enterprise</artifactId>
        <version>1.7-rc1</version>
    </dependency>
</dependencies>

推荐答案

只需在此处绑上松散的末端...在gremlin-users邮件列表中回答:

Just tying up loose ends here...answered in the gremlin-users mailing list:

https://groups.google.com/forum/#! topic/gremlin-users/xUNeuJkPyUo

给出卢卡的回应的基本摘要...首先关闭轻巧的边缘:

Basic summary given Luca's response...First turn off lightweight edges:

alter database custom useLightweightEdges=false

然后确保使用较新的OrientDB依赖项:

Then make sure to use the newer OrientDB dependency:

<dependency>
    <groupId>com.orientechnologies</groupId>
    <artifactId>orientdb-graphdb</artifactId>
    <version>1.7-rc1</version>
</dependency>

这篇关于在带有蓝图/Tinkerpop的OrientDb中创建边缘的问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆