2015-11-25 16 views
0

問題背景中立即查詢:Neo4j的插入JDBC,但不能在同一個連接

1.database is neo4j 2.3.1, driver using jdbc; 
2.db connection initialized as a class member, default is auto-commit(not changed); 

爲了避免重複插入,我插入之前查詢。程序停止後,發現重複。爲什麼?

代碼:

String query = "CREATE (n:LABEL {name:'jack'})"; 
System.out.println(query); 
Statement stmt = dbConnection.createStatement(); 
stmt.executeUpdate(query); 
stmt.close(); 

回答

0
  1. 使用合併+獨特的約束,而不是
  2. 你如何「檢查」
  3. 你將不得不在同一TX檢查,並採取寫鎖定
+0

我認爲加入「使用準備好的語句」可以很好;) – Supamiu

+0

嗨@Michael Hunger,謝謝。 1.你可以更具體地說「合併」,我知道是「獨特」是一種出路。 2.只是認爲api有點令人困惑,如果你只是插入一條記錄,爲什麼不能在同一個連接上查詢它(我試過,如果每個插入使用一個新的連接,可以查詢它,因此沒有重複) –

0

調試後我發現對於neo4j-jdbc(v2.1.4),默認的數據庫連接事務級別是TRANSACTION_NONE,然後我設置它到TRANSACTION_READ_COMMITTED,上面的問題消失了。所以我認爲TRANSACTION_READ_COMMITTED會強制提交之前的插入,儘管這不是推薦的方式。隔離級別參考:Difference between read commit and repeatable read