关系被创建但不存储在嵌入式 neo4j 中
Relationships are created but not stored in embedded neo4j
我有一个奇怪的问题,我使用 createRelationshipTo() 方法在嵌入式 neo4j 中创建关系。但是当我使用 getRelationships() 方法访问这些关系时,没有找到任何关系。当我创建关系并立即使用 getRelationships() 方法时,就会找到该关系。但后来,这种关系就消失了。
例如在 sampleMethod() 中,我在同一方法中创建和检索关系,因此它 returns 两种关系,但是当我尝试在 sampleMethod2() 中使用相同的 getRelationships() 方法检索相同的关系时,它什么也没给出。
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;
}
不要在没有提交的情况下关闭交易。否则执行回滚。
所以:
- 使用
catch-with-resource
模式关闭交易
- 将 tx 作为成功放在代码的末尾
示例:
try ( Transaction tx = db.beginTx())
{
Node myNode = db.createNode();
myNode.setProperty( "name", "my node" );
tx.success(); // commit the tx
}
我有一个奇怪的问题,我使用 createRelationshipTo() 方法在嵌入式 neo4j 中创建关系。但是当我使用 getRelationships() 方法访问这些关系时,没有找到任何关系。当我创建关系并立即使用 getRelationships() 方法时,就会找到该关系。但后来,这种关系就消失了。
例如在 sampleMethod() 中,我在同一方法中创建和检索关系,因此它 returns 两种关系,但是当我尝试在 sampleMethod2() 中使用相同的 getRelationships() 方法检索相同的关系时,它什么也没给出。
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;
}
不要在没有提交的情况下关闭交易。否则执行回滚。
所以:
- 使用
catch-with-resource
模式关闭交易 - 将 tx 作为成功放在代码的末尾
示例:
try ( Transaction tx = db.beginTx())
{
Node myNode = db.createNode();
myNode.setProperty( "name", "my node" );
tx.success(); // commit the tx
}