2013-08-30 1 views
2

나는 이해력이있다. "getOrCreateNode()"와 같은 Neo4jTemplate의 데이터베이스 작업이 주변 트랜잭션에 속한 방식을 이해할 수 없습니다. 어떻게 구현됩니까? Neo4jTemplate은 멀티 스레드 환경에서 공유됩니까? 거래의 고유 회원을 볼 수 없습니다. 작업이 트랜잭션 개체 (예 : tx.getOrCreateNode())에 직접 있는지 이해할 수 있습니다.Spring Data Neo4j는 트랜잭션 작업을 어떻게 시작합니까?

@Service 
public class TestService { 

@Autowired 
private Neo4jTemplate template; 

    public void save(IndexedTriple triple) { 
    GraphDatabase gdb = template.getGraphDatabase(); 
    Transaction tx = gdb.beginTx(); 

    Node subject = gdb.getOrCreateNode() 
    ... 

    tx.success(); 
    tx.finish(); 
    } 
} 

미리 감사드립니다.

답변

3

아래의 reference documentation에서 추출한 내용이 꽤 많이 요약되어 있습니다. Neo4j 트랜잭션을 사용하는 대신 Spring 트랜잭션 관리자를 사용하여 스프링이 경계를 처리하도록합니다. 또한 트랜잭션 관리는 스레드로부터 완전히 안전합니다. 당신을 위해 @Transactional 주석을 사용하는 것이 좋습니다. 기존 트랜잭션이 이미 있으면 기존 트랜잭션과 함께 Spring이 조인됩니다.

거래

Neo4jTemplate 그 방법의 일부에 대한 암시 적 트랜잭션을 제공한다. 예를 들어 save는 그것을 사용합니다. 기타 수정 작업을 위해서는 @Transactional 또는 TransactionTemplate을 사용하여 Spring 트랜잭션 관리를 제공하십시오.