영속성 컨텍스트와 Transaction의 관계

2022. 3. 23. 13:51BackEnd(Java)/Spring Data JPA

프로젝트를 진행하면서 영속성 콘텍스트를 정확히 알고 쓰지 못해 생긴 이슈에 대해서 정리하고자 한다.

 

결론부터 말하자면, 영속성 컨텍스트와 트랜잭션 생존 범위가 동일하고, 트랜잭션이 같으면 같은 영속성 컨텍스트를 사용한다. 그러나 트랜잭션이 다르면 다른 영속성 컨텍스트를 사용하게 된다(그림 1참고)

 

이 개념을 이해하고 꼭 개발하도록 하자!!!!!!!(정확히 이해를 하지 못한채 API 서버 개발할 때 잦은 로직 변경이 있었음 ㅠㅠ)

그림 1 -영속성 컨텍스트와 트랜잭션의 범위

이슈

- 하나의 트랜잭션이 끝난 후 그 값을 다른 트랜잭션에서 연산(persist, remove... 등)하려고 하면 영속화되지 않은 엔티티를 어떠한 행위를 하려고 해서 오류가 뜨게 된다. 

 

해결방법

  1.  다른 트랜잭션에서 연산하기 전에 em.find를 통해 영속성 컨텍스트에서 가져와서 연산 행위를 한다.
  2.  하나의 트랜잭션에서 연산을 하여 요청을 처리한다.

 

 

 

 

참조 문서

https://willseungh0.tistory.com/73

반응형