레거시 애플리케이션은 JDBC 3.0을 사용합니다. 각 스레드에 대해 동일한 JDBC 연결을 리턴 할 수있는 자체 트랜잭션 관리자를 구현하여 트랜잭션을 지원합니다. 최근에 발견 한 문제점은 중첩 된 트랜잭션을 지원하지 않는다는 것입니다. 트랜잭션이 다른 트랜잭션 내에서 시작되면 내부 트랜잭션의 컨텍스트에서 실행되는 모든 SQL은 동일한 db 연결을 사용하여 실행되고 커밋되거나 롤백하면 외부 트랜잭션부터 시작하여 모든 변경 사항을 자동으로 커밋하거나 롤백합니다.JDBC 3.0을 사용하여 중첩 된 트랜잭션에 대한 지원 구현
JDBC 3.0 세이브 포인트를 사용하여 중첩 트랜잭션에 대한 지원을 구현할 수 있습니다. 중첩 트랜잭션이 시작될 때마다 현재 연결에 대해 새 세이브 포인트를 설정할 수 있습니다. 이후에 중첩 트랜잭션이 롤백되면이 세이브 포인트로 롤백됩니다. 반면에, 그것이 커밋된다면, 나는 아무것도하지 않을 것입니다. 가장 외부 트랜잭션의 커밋 만 db에 대한 변경 사항을 저장합니다.
이 정보가 맞습니까? 이 접근법에는 결함이 있습니까? 그렇다면 내 가능성은 무엇입니까?
감사합니다.
?중첩 된 트랜잭션은 다른 연결에서 수행 되었더라도 이전에 커밋 된 후에도 롤백됩니까? – Stas
아니요, 중첩 트랜잭션은 롤백되지 않으므로 더 이상 실제로 "중첩"되지 않습니다. – jdigital
Spring은 격리 문제를 무시하지 않습니다. http://www.ibm.com/developerworks/java/library/j-isolation/ – duffymo