프로젝트에서 neo4j-rest-binding을 사용했지만 트랜잭션 문제가 발생했습니다. 따라서 트랜잭션을 자체적으로 제어하려고합니다. neo4j-jdbc가 좋은 옵션이라는 것을 알았습니다. Google 포럼의 기사에서 neo4j-rest-binding보다 더 많은 찬성이 들립니다. (https://groups.google.com/forum/#!topic/neo4j/4DG_R5Yh2BM)Neo4j jdbc를 사용할 때 Node 객체를 얻는 방법은 무엇입니까?
쿼리를 수행하기 위해 neo4j-rest-binding을 사용했는데 그 결과를 Node 객체로 변환 할 수 있습니다. 내가 tx.fail()
, tx.success()
및 tx.finish()
를 사용하는 경우
QueryResult<Map<String, Object>> result = engine.query("MATCH (n) RETURN n")
Iterator<Node> nodeIter = result.to(Node.class).iterator();
// if I want to get the relationship of the node
Iterator<Relationship> outRelIter = node.getRelationships(Direction.OUTGOING).iterator();
...
하지만 쿼리를 할 neo4j - JDBC를 사용하는 경우, 내가 노드 객체를 가져 오는 방법을 모르는 ...
ResultSet rs = stmt.executeQuery("MATCH (n) RETURN n");
while(rs.next()) {
Map<String, Object> res = (Map<String, Object>) rs.getObject("n");
// how to get Node object?
}
또 다른 질문은, 트랜잭션이 실패하면 어떻게 알 수 있습니까? tx.success
이 호출되지 않으면 롤백 할 것이지만 MongoDB와 Neo4j를 결합하므로 Neo4j가 실패하면 MongoDB를 롤백하고 싶습니다. 같은 :
//Do some MongoDB operation...
...
//Do some Neo4j operation...
tx.begin();
try {
...
if(???) // if transaction fail
// rollback MongoDB
else
tx.success();
} finally {
tx.close();
}
neo4j-jdbc를 사용할 때 작동합니까? (이 질문에 나 혼자 답변했습니다.)
try {
conn.setAutoCommit(false); // for Neo4j
//Do some MongoDB operation...
...
//Do some Neo4j operation...
conn.commit();
} catch(SQLException e) {
conn.rollback(); // for Neo4j
// rollback MongoDB
}
많은 감사!
답장을 보내 주셔서 감사합니다! 관련 노드를 가져 오려면 관련된 노드의 정보를 얻기 위해 'MATCH (n) - [] -> (m) RETURN m'과 같은 쿼리를 만들어야합니다. 맞아? 임베디드 메서드를 사용하여 객체를 제어 할 수 있으므로 neo4j-rest-binding을 사용하는 것이 더 쉽다고 생각합니다. 당신이 생각하는 것이 더 나아 졌다고 말할 수 있습니까? 많은 감사합니다. – LoveTW
또 다른 질문은 : (connection.commit()을 호출 한 후) neo4j에 데이터를 커밋 할 때 오류가 발생할 수 있습니다. 어떻게 커밋이 실패했는지 알 수 있습니까? – LoveTW
내 질문을 업데이 트했습니다 :) – LoveTW