Hibernate를 사용한 중첩 된 Spring 트랜잭션

Drenda

이 상황이 있습니다.

@Component @Transactional
public class Test{

     public void mainMetod(){
        //do some changes on db

        classA.method1();

        classA.method2();
     }  

}

@Component @Transactional
public class A{

      public method1(){
           //read some data from db that Test class wrote
      }


      public method2(){
           //read some data from db that Test class wrote 
      }
}

및 app-jpa-config.xml

    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
    <!-- <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> -->
    <property name="entityManagerFactory" ref="entityManagerFactory" />
    <property name="dataSource" ref="dataSource" />
</bean>

<tx:annotation-driven />

이 동작을 구현하려고합니다.

  • 클래스 A의 method1이 Test 클래스의 mainMetod에 작성된 데이터를 볼 수 있기를 바랍니다.
  • method1에 예외가있는 경우 롤백 관심은 method1 ()에 의해 수정되고 Test 클래스의 mainMethod에 의해 수정 된 롤백이 아닙니다. 테스트 클래스의 mainMethod에서 작성한 업데이트 된 데이터를 읽어야합니다.
  • method2에 예외가있는 경우 롤백 관심은 method2 ()에 의해 수정되고 Test 클래스의 mainMethod에 의해 수정 된 롤백이 아닙니다. 테스트 클래스의 mainMethod에서 작성한 업데이트 된 데이터를 읽어야합니다.

기본 전파를 사용하면 첫 번째 요청 (mainmethod에서 작성한 데이터를 읽을 수 있음)에 도달하지만 두 번째 요청을 수행 할 수 없습니다. method1 / 2 롤백 전체 트랜잭션을 롤백합니다.

전파 REQUIRES_NEW를 사용하면 두 번째 요청을 달성하지만 하나는 달성하지 않습니다.

유일한 방법은 TransactionTemplate을 사용하여 수동 트랜잭션을 사용하는 것입니다. 내 가정이 맞습니까?

Drenda

중첩 된 트랜잭션 주석은 Hibernate에서 지원되지 않습니다. 그래서 내가 찾은 문제를 해결하는 유일한 방법은 TransactionTemplate을 사용하는 것입니다.

transactionTemplate.execute(new TransactionCallback<Void>() {

        @Override
        public Void doInTransaction(TransactionStatus status) {
}
});

doInTransaction 메서드 내의 모든 코드는 트랜잭션 컨텍스트에서 실행됩니다. 따라서 이런 방식으로 메서드 커밋 결과를 정확히 파악할 수 있습니다.

도움이 되었기를 바랍니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

오라클에서 "중첩 된"트랜잭션 사용

분류에서Dev

Spring + Hibernate + SQLite 트랜잭션 이상한

분류에서Dev

중첩 된 트랜잭션에 대한 적절한 TransactionScope

분류에서Dev

Spring / EclipseLink를 사용한 EntityManager 트랜잭션 없음

분류에서Dev

Spring / hibernate의 트랜잭션

분류에서Dev

취급 적절한 최대 절전 모드 중첩 된 트랜잭션

분류에서Dev

단일 Hibernate 세션에서 다중 트랜잭션 사용

분류에서Dev

테스트를 위해 롤백 된 트랜잭션 사용

분류에서Dev

이중으로 중첩 된 트랜잭션의 롤백 세이브 포인트를 우회

분류에서Dev

ODataController를 사용한 트랜잭션

분류에서Dev

트리거에서 중첩 된 트랜잭션 롤백

분류에서Dev

중첩 된 트랜잭션이 지원되지 않는 오류를 피하는 방법은 무엇입니까?

분류에서Dev

Java Spring 및 Hibernate 및 EntityManager를 사용하는 @Transactional 메소드의 트랜잭션 커밋 문제

분류에서Dev

Spring Hibernate "관리 트랜잭션 중에는 커밋 할 수 없습니다!"

분류에서Dev

Spring 4 + Hibernate 5.1 트랜잭션이 다른 DAO 쿼리를 호출 한 후 자동 커밋 됨

분류에서Dev

트랜잭션 중에 데이터를 사용할 수 있도록 유지 (postgresql)

분류에서Dev

SQL Server와 Cognos 모두에서 트랜잭션 날짜를 사용하여 가장 오래된 트랜잭션 금액을 가져 오는 방법

분류에서Dev

SQL 중첩 트랜잭션

분류에서Dev

중첩 된 저장 프로 시저에 포함 된 TransactionScope 및 트랜잭션

분류에서Dev

중첩 된 BEFORE INSERT / UPDATE 트리거가있는 원자 트랜잭션

분류에서Dev

@Transactional을 사용하는 Spring 3.x 및 Hibernate 4.x 트랜잭션 관리 문제

분류에서Dev

Spring을 사용할 때 JPA 또는 Hibernate 트랜잭션을 수동으로 취소하는 방법

분류에서Dev

Spring의 중첩 트랜잭션에서 모든 DB 커밋 롤백

분류에서Dev

Spring-jms 및 Spring-tx를 사용하는 XA 트랜잭션 관리자로서의 IBM MQManager

분류에서Dev

REST API를 통한 Firebase 트랜잭션

분류에서Dev

nHibernate-참조 된 단일 업데이트를 위해 트랜잭션을 사용해야합니까?

분류에서Dev

Flutter를 사용한 Firebase 인증 트랜잭션

분류에서Dev

Redis Object Mapper를 사용한 원자 트랜잭션?

분류에서Dev

Teradata를 사용한 글로벌 트랜잭션

Related 관련 기사

  1. 1

    오라클에서 "중첩 된"트랜잭션 사용

  2. 2

    Spring + Hibernate + SQLite 트랜잭션 이상한

  3. 3

    중첩 된 트랜잭션에 대한 적절한 TransactionScope

  4. 4

    Spring / EclipseLink를 사용한 EntityManager 트랜잭션 없음

  5. 5

    Spring / hibernate의 트랜잭션

  6. 6

    취급 적절한 최대 절전 모드 중첩 된 트랜잭션

  7. 7

    단일 Hibernate 세션에서 다중 트랜잭션 사용

  8. 8

    테스트를 위해 롤백 된 트랜잭션 사용

  9. 9

    이중으로 중첩 된 트랜잭션의 롤백 세이브 포인트를 우회

  10. 10

    ODataController를 사용한 트랜잭션

  11. 11

    트리거에서 중첩 된 트랜잭션 롤백

  12. 12

    중첩 된 트랜잭션이 지원되지 않는 오류를 피하는 방법은 무엇입니까?

  13. 13

    Java Spring 및 Hibernate 및 EntityManager를 사용하는 @Transactional 메소드의 트랜잭션 커밋 문제

  14. 14

    Spring Hibernate "관리 트랜잭션 중에는 커밋 할 수 없습니다!"

  15. 15

    Spring 4 + Hibernate 5.1 트랜잭션이 다른 DAO 쿼리를 호출 한 후 자동 커밋 됨

  16. 16

    트랜잭션 중에 데이터를 사용할 수 있도록 유지 (postgresql)

  17. 17

    SQL Server와 Cognos 모두에서 트랜잭션 날짜를 사용하여 가장 오래된 트랜잭션 금액을 가져 오는 방법

  18. 18

    SQL 중첩 트랜잭션

  19. 19

    중첩 된 저장 프로 시저에 포함 된 TransactionScope 및 트랜잭션

  20. 20

    중첩 된 BEFORE INSERT / UPDATE 트리거가있는 원자 트랜잭션

  21. 21

    @Transactional을 사용하는 Spring 3.x 및 Hibernate 4.x 트랜잭션 관리 문제

  22. 22

    Spring을 사용할 때 JPA 또는 Hibernate 트랜잭션을 수동으로 취소하는 방법

  23. 23

    Spring의 중첩 트랜잭션에서 모든 DB 커밋 롤백

  24. 24

    Spring-jms 및 Spring-tx를 사용하는 XA 트랜잭션 관리자로서의 IBM MQManager

  25. 25

    REST API를 통한 Firebase 트랜잭션

  26. 26

    nHibernate-참조 된 단일 업데이트를 위해 트랜잭션을 사용해야합니까?

  27. 27

    Flutter를 사용한 Firebase 인증 트랜잭션

  28. 28

    Redis Object Mapper를 사용한 원자 트랜잭션?

  29. 29

    Teradata를 사용한 글로벌 트랜잭션

뜨겁다태그

보관