1
JavaドライバでNe04j v3.1.0を使用しています。明示的なトランザクション内で更新ステートメント(cypher SET)の結果を保持するのに問題があります。トランザクション内から返された値は変更を示しますが、トランザクションが終了した後は変更が消滅したように見えます。私は、私はすべての結果を消費し、私のセッションを閉じるについての私のコードでは積極的になっているNeo4j Javaドライバの処理がコミットしないようです
http://neo4j.com/docs/developer-manual/current/drivers/process-results/][1]
[ 更新が結果処理に敏感であることを知っています。私は、問題を示すために、テストプログラムを書いた:
package uk.co.scapps.createdirs.neo;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.neo4j.driver.v1.AuthTokens;
import org.neo4j.driver.v1.Driver;
import org.neo4j.driver.v1.GraphDatabase;
import org.neo4j.driver.v1.Record;
import org.neo4j.driver.v1.Session;
import org.neo4j.driver.v1.StatementResult;
import org.neo4j.driver.v1.Transaction;
public class Trans {
static Driver driver = GraphDatabase.driver("bolt://localhost", AuthTokens.basic("neo4j", "neo4k"));
static Session session = driver.session();
final static Logger logger = LogManager.getLogger();
public static void main(String[] args) {
session = driver.session();
StatementResult results ;
session = driver.session();
try (Transaction tx = session.beginTransaction()) {
results = tx.run("MATCH (n:THING) RETURN n.name as name");
while (results.hasNext()) {
Record record = results.next();
System.out.println("in the txn before the update: " + record.get("name").toString());
}
results.consume();
results = tx.run("MATCH (n:THING {name: 'a'}) SET n.name = 'asdasd' RETURN n.name as name");
while (results.hasNext()) {
Record record = results.next();
System.out.println("results returned from the update: " + record.get("name").toString());
}
results.consume();
results = tx.run("MATCH (n:THING) RETURN n.name as name");
while (results.hasNext()) {
Record record = results.next();
System.out.println("after the update but still in the txn: " + record.get("name").toString());
}
results.consume();
tx.close();
session.close();
}
session = driver.session();
results = session.run("MATCH (n:THING) RETURN n.name as name");
while (results.hasNext()) {
Record record = results.next();
System.out.println("after the txn: " + record.get("name").toString());
}
results.consume();
session.close();
}
}
そして、ここでは、出力されます。
in the txn before the update: "a"
in the txn before the update: "b"
in the txn before the update: "c"
results returned from the update: "asdasd"
after the update but still in the txn: "asdasd"
after the update but still in the txn: "b"
after the update but still in the txn: "c"
after the txn: "a"
after the txn: "b"
after the txn: "c"
私はコードが含まれていないが、私は(非トランザクションを書きましたプログラムの暗黙的なトランザクション)バージョンと期待どおりに動作します。
私は助けていただきありがとうございます。
質問を削除するか、独自の回答を受け入れることを検討してください。 – InverseFalcon