2014-11-07 5 views
1

HibernateTemplate에 API를 말한다 :HibernateTemplate은 auto-commit으로 돌아 간다. 어디에서?

http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/orm/hibernate3/HibernateTemplate.html

사람이 지적시겠습니까 거래의 외부에서 사용할 때

... 그것의 기능은 '자동 위탁'스타일의 행동에 다시 하락 그 위치는 다음과 같습니다.

https://github.com/

http://grepcode.com

나는 한 시간 동안 성공하지 못했다. 최대 절전 모드 트랜잭션이 db와의 모든 상호 작용에 대해 열려 있어야한다는 것을 이해하지만 트랜잭션을 생성하지 않을 때 JTA를 사용하지 않고 여전히 읽기 작업을 수행하고 있습니다. 벌금.

답변

1

All database statements are executed within the context of a physical transaction 우리가 명시 적으로 트랜잭션 경계 (BEGIN/COMMIT/ROLLBACK)를 선언하지 않은 경우에도 마찬가지입니다. 데이터 무결성은 ACID properties of database transactions에 의해 시행됩니다.

논리 트랜잭션 (Spring 트랜잭션 인터셉터)의 컨텍스트에서 현재 작업 단위를 등록하지 않으면 각 DB 문은 별도의 데이터베이스 실제 트랜잭션에서 실행되므로 " 자동 커밋 "모드로 전환됩니다.

... 당신은 @Transactional 컨텍스트 내에서 TransactionTemplate의를 사용할 수

이 문구

가 당신에게 거래의 외부에서 사용할 때 의 기능은 '자동 위탁'스타일 동작으로 후퇴하고 트랜잭션 컨텍스트가없는 경우에도 마찬가지입니다. 따라서 for performance reasons you should do so이지만 Spring 트랜잭션 경계를 사용할 의무는 없습니다.

그래서 TransactionTemplate 관련 코드는 현재 실행중인 트랜잭션 컨텍스트가 있거나없는 것과 독립적으로 작동합니다.

평범한 JDBC를 사용하면 단일 데이터베이스 트랜잭션에 여러 명령문을 등록하려는 경우 코드에서 트랜잭션 경계 (begin/commit/rollback)를 명시 적으로 선언해야합니다. 그렇게하지 않으면 자동 커밋 모드로 실행됩니다.

+0

그렇다면 ... "자동 커밋"으로 되돌아 갈 능력이 있습니다. " 방법? 어쨌든 우리가 아무런 노력없이 그것을 얻을 수 있다면, API 문서는 무엇이라고 말합니까? 봄은 뒤로 물러 설 것인지 아닌지에 대해 뭔가를합니까? – MaxNevermind

+0

업데이트 된 답변보기 –

+0

그러면 고객 코드에서 트랜잭션을 열지 않아도됩니다. 우리가해야한다는 것을 의미하지만 우리가하지 않으면 예외를 던지지 않을 것입니다. "데이터베이스 또는 시스템, 트랜잭션 경계가 항상 필요합니다."라고 말하는 최대 절전 모드 문서와 혼동되었습니다. [http://docs.jboss.org] (http://docs.jboss.org/hibernate/orm/3.6/reference/en-US/html_single/#transactions-demarcation) 최대 절전 모드로 작동 시키려고합니다. 예외가 없으면 봄의 바깥에서 대답을 받아 들일 것입니다. – MaxNevermind

관련 문제