Closed biud436 closed 10 months ago
특정한 트랜잭션 전파 속성이 전달될 때,
기존 프록시 객체가 새로운 연결을 가진 EntityManager를 반환해야 합니다.
이렇게 하지 않으면 Repository가 save()될 때, 트랜잭션이 이미 생성되었는지 감지하지 못하고 save()를 호출할 때마다 하나의 트랜잭션으로 묶이게 됩니다.
이를 방지하려면 기존 EntityManager 프록시를 변경해야 합니다.
하나의 트랜잭션이 시작되고 끝날 때 엔티티 매니저 큐에서 이미 사용된 엔티티 매니저를 제거해야 합니다.
기존 엔티티 매니저 프록시에서는 가장 첫번째 원소만 가져와야 할 것입니다.
이렇게 하면 Propagation.REQUIRES_NEW가 반복되더라도 안전합니다.
다음 로직이 필요합니다.
중요한 점은 루트 트랜잭션이 끝났을 땐 반드시 모든 컨텍스트를 비워야 한다는 점입니다.
특정한 트랜잭션 전파 속성이 전달될 때,
기존 프록시 객체가 새로운 연결을 가진 EntityManager를 반환해야 합니다.
이렇게 하지 않으면 Repository가 save()될 때, 트랜잭션이 이미 생성되었는지 감지하지 못하고 save()를 호출할 때마다 하나의 트랜잭션으로 묶이게 됩니다.
이를 방지하려면 기존 EntityManager 프록시를 변경해야 합니다.
하나의 트랜잭션이 시작되고 끝날 때 엔티티 매니저 큐에서 이미 사용된 엔티티 매니저를 제거해야 합니다.
기존 엔티티 매니저 프록시에서는 가장 첫번째 원소만 가져와야 할 것입니다.
이렇게 하면 Propagation.REQUIRES_NEW가 반복되더라도 안전합니다.
다음 로직이 필요합니다.
중요한 점은 루트 트랜잭션이 끝났을 땐 반드시 모든 컨텍스트를 비워야 한다는 점입니다.