2009-05-20 2 views
1

JPA로 Spring에서 트랜잭션을 어떻게자를 수 있습니까?

나는이 코드를 가지고 :

나는 한 줄의 입력이 처리 된 후에 루프 본문을 통해 트랜잭션을하고 싶습니다. 업데이트 된 객체는 커밋되어야하므로 프로그램이 중단되면 모든 행을 다시 처리하지는 않지만 오류 행부터 시작합니다.

Spring 2.5, Hibernate 3.4, JPA를 사용하고 있습니다 (즉, EntityManager를 가지고 있습니다).

어떻게해야합니까? 루프에서 em.getTransaction().commit()을 호출하려고 시도했지만 Spring은이를 허용하지 않습니다.

답변

0

:

javax.persistence.EntityManager 인스턴스를 갖는

(I는 "그들을"가정)

먼저 트랜잭션 관리자 (아마도 HibernateTransactionManager)를 설정해야합니다. 그렇다면 IMHO 내부에서 각 반복을 실행하기 위해 Spring의 TransactionTemplate을 사용하는 것이 가장 좋습니다. TransactionTemplate이 실제로 새 트랜잭션을 시작하거나 메서드 입력시 트랜잭션이 실행되고 있지 않은지 확인해야합니다.

팁 : 트랜잭션 동작 디버깅을위한 로그 범주로 트랜잭션 관리자의 클래스 이름을 사용하십시오.

1

엔티티 관리자 읽기 조작에는 트랜잭션이 필요하지 않습니다. 그래서 행을 업데이트하고 그것을 트랜잭션으로 설정하는 내부 메소드를 리팩토링하려고합니다. @transactional을 사용하려면 public 메소드가 필요합니다.

2

봄의 TransactionTemplate을 살펴볼 것을 권합니다. TransactionTemplate documentation에는 달성하고자하는 것을 정확히 처리하는 예제가 들어 있습니다.

관련 문제