2013-08-09 2 views

답변

1

스프링 자체는 트랜잭션을 시작/커밋/롤백 할 수 없습니다. 그의 목적은 트랜잭션 라이프 사이클을 관리하고 지속성 엔진 (Hibernate, JDBC, JPA 등)에 실제 시작/커밋/롤백을 위임하는 데 필요한 보일러 플레이트 코드를 제거하는 것입니다.
이 예제를 보자

Session s = sessionFactory.getCurrentSession(); 
Transaction tx = s.beginTransaction(); 
try 
{ 
    doSomeStuff(); 
    tx.commit(); 
} 
catch(HibernateException e) 
{ 
    tx.rollback(); 
} 
s.close(); 

이 (당신이 코드를 다시 작성할 필요 JPA로 전환해야하는 경우, 최대 절전 모드 사용) (보일러 플레이트) 트랜잭션에서 작업을 수행하기 위해 표준입니다. 모든 보일러 플레이트 코드를 대체하는 데 사용됩니다

@Transactional 
public void doSomeStuff() 
{ 
    // your code 
} 

내가 예를 들어, 주석을 사용하고 있는데 @Transactional : 스프링
은이 방법으로 표준 코드를 제거 (XML 또는 사용하여 주석을 통해 AOP) 선언적 방법을 사용할 수 있습니다 다른 기능이 있습니다. JPA 로의 전환은 구성 문제 일 뿐이므로 투명합니다. 질문은 정말 복잡하고 질문에 대한 대답은 다음과 같습니다 :
Hibernate Transaction과 Spring Transaction을 "비교"할 수 없습니다. Spring 트랜잭션은 "Spring 트랜잭션 지원"이어야합니다.

+0

좋은 세부 설명을보세요.하지만 10-12 개의 쿼리를 실행하고 모든 쿼리가 상호 의존적이며 쿼리에 문제가있는 경우 데이터가 @Transactional 표기법을 사용하여 롤백됩니다. –

+0

나는 마지막 코멘트를 얻지 못했습니다 –

+0

네, 데이터는'@ Transactional'을 사용해서 만 롤백 될 것입니다 :'// your code'가 10-12 개의 질의를 포함하고 하나가 실패하면 이전 명령은 모두 버려집니다; '@ Transactional'은 전체 메소드에 적용됩니다. –

1

스프링 (AOP를 사용하여, @Transactional 주석과 함께 전 세계적으로 또는 구성) 당신이 선언 방법으로 트랜잭션을 관리 할 수 ​​있도록 할 것입니다. JTA를 사용하지 않는다면 트랜잭션을 처리하기 위해 Hibernate에 위임하도록 트랜잭션을 설정합니다.

트랜잭션 처리에는 Spring을 사용하십시오.

+0

답변을 좀 더 탐색 할 수 있습니까? –

+0

http://static.springsource.org/spring/docs/3.2.x/spring-framework-reference/htmlsingle/#transaction-declarative 및 http://static.springsource.org/spring/docs/3.2.x를 참조하십시오./spring-framework-reference/htmlsingle/# orm-hibernate-tx-declarative. 좀 더 구체적인 질문이 있다면, 아마도 대답 할 수있을 것입니다. –

관련 문제