Neo4j データベースにノードと関係を作成しようとしています。ノードIDを出力できますが、保持されないため、ノードが作成されます。私のプログラムの次のフェーズは、インデックス内のノードの数をカウントすることであり、NullPointerExpection エラーが発生します。Gephi を使用してグラフを視覚化していますが、ノードも関係も表示されません。ノードを永続化するにはどうすればよいですか? これは、これらのノード作成メソッドを呼び出すトランザクションにラップされた別のメソッド (長さのために表示されていません) があるためでしょうか? ありがとう
コードの一部を次に示します。
public class Neo4JGraphDbClass {
private String graphLocation = "D:\\testdb" ;
private GraphDatabaseService graphDb ;
private IndexManager graphIndex ;
private Index<Node> property1;
private Index<Node> special_nodes ;
public Neo4JGraphDbClass() {}
public void createGraphDb() {
graphDb = new EmbeddedGraphDatabase(graphLocation) ;
graphIndex = graphDb.index();
property1 = graphIndex.forNodes("PROPERTY1");
special_nodes = graphIndex.forNodes("SPECIAL_NODES");
}
public Node createAndIndex(Integer[] property1) {
Transaction transaction0 = graphDb.beginTx();
try {
Node node = graphDb.createNode();
node.setProperty("PROPERTY1",property1) ;
property1.putIfAbsent(node, "PROPERTY1", property1);
System.out.println(node.getId());
transaction0.success();
return node;
} finally {
transaction0.finish();
}
}
public Node createSpecialNodes(Integer name) {
Transaction transaction1 = graphDb.beginTx();
try {
Node node = graphDb.createNode();
node.setProperty("SPECIAL_NODE", name);
special_nodes.add(node, "SPECIAL_NODE", name);
transaction1.success();
return node;
}
finally {
transaction1.finish();
}
}
public void addNodesToGraph(Integer preName, ArrayList<Integer[]> preProperty1) {
//stuff to change preName into name and preProperty into property
Transaction transaction = graphDb.beginTx();
try {
Node specialNode = createSpecialNodes(name) ;
Node previousNode = graphDb.getReferenceNode();
for (int i = 0; i < property1.size(); i++) {
Node currentNode = createAndIndex(property1.get(i));
previousNode.createRelationshipTo(currentNode, RelTypes.NEXT_MEASURE);
currentNode.createRelationshipTo(specialNode,RelTypes.SAMPLE);
previousNode = currentNode; }
transaction.success();
}
finally {
transaction.finish();
}
}
public Integer countIndex() {
Integer hitSize;
Transaction tx = graphDb.beginTx();
try {
IndexHits<Node> hits = graphIndex.forNodes("PROPERTY1").get("PROPERTY1", "*");
hitSize = hits.size();
tx.success();
}
finally {
tx.finish();
}
return hitSize;
}
public Integer indexSize(Integer lookup) throws NullPointerException{
Integer hitSize;
Transaction tx2 = graphDb.beginTx();
try {
IndexHits<Node> hits = graphIndex.forNodes("PROPERTY1").query(lookup);
hitSize = hits.size();
tx2.success();
}
finally {
tx2.finish();
}
return hitSize;
}