Отношения создаются, но не сохраняются во встроенном neo4j - PullRequest
0 голосов
/ 13 июня 2018

У меня странная проблема, связанная с созданием отношений во встроенном neo4j с помощью метода createRelationshipTo ().Но когда я использую метод getRelationships () для доступа к этим отношениям, никакие отношения не обнаруживаются.Когда я сразу создаю связь и использую метод getRelationships (), эта связь обнаруживается.Но позже это отношение теряется.

Например, в sampleMethod () я создаю и получаю отношения как в одном методе, так что он возвращает оба отношения, но когда я пытаюсь получить те же отношения, используя одни и те же getRelationships() в sampleMethod2 () ничего не дает.

public ArrayList<String> sampleMethod() {
        ArrayList<String>list = new ArrayList<String>();
        DatabaseConnection dbConnection = new DatabaseConnection();
        GraphDatabaseService graphDb = dbConnection.connectToDatabase();
        Transaction tx = graphDb.beginTx();

        Node user = graphDb.findNode(Label.label("User"), "userName", "hamna123");
        Node restaurant = graphDb.findNode(Label.label("Restaurants"), "name", "The Grand Regency");
        Relationship rel = user.createRelationshipTo(restaurant, RelationshipType.withName("Visited"));
                    Relationship rel2 = user.createRelationshipTo(restaurant, RelationshipType.withName("Favorite"));
        for (Relationship relationship : user.getRelationships()) {
            String found = relationship.getType().name().toString();
            list.add(found);
        }
        tx.close();
        //graphDb.shutdown();
        return list;

    }

public ArrayList<String> sampleMethod2() {
        ArrayList<String>list = new ArrayList<String>();
        DatabaseConnection dbConnection = new DatabaseConnection();
        GraphDatabaseService graphDb = dbConnection.connectToDatabase();
        Transaction tx = graphDb.beginTx();
        Node user = graphDb.findNode(Label.label("User"), "userName", "hamna123");
                Iterable<Relationship> relations = user.getRelationships();
        for (Relationship relationship : relations) {
            String found = relationship.getType().name().toString();
            list.add(found);
        }
        tx.close();
        graphDb.shutdown();
        return list;

    }

1 Ответ

0 голосов
/ 13 июня 2018

Не закрывать транзакцию без совершенного этого.В противном случае выполняется откат.

Итак:

  • используйте шаблон catch-with-resource для закрытия транзакции
  • ставьте tx как успешный в конце вашего кода

Пример:

try ( Transaction tx = db.beginTx())
{
    Node myNode = db.createNode();
    myNode.setProperty( "name", "my node" );
    tx.success(); // commit the tx
}
...