[JPA] EntityManager

김형진·2023년 5월 12일

EntityManager를 사용하다 보면 의문이 드는 부분이 있는데 바로

싱글톤인데 어떻게 다른 영속성 컨텍스트를 다루는가 이다.

EntityManager는 빈으로 관리돼서 Respository 여기저기서 의존주입 받아 사용된다.

당연히 동시성 문제를 생각할 수 밖에 없는데,

사실 주입받는 EntityManager는 프록시객체이고,
이 객체에 요청이 들어오면 트랜잭션 단위에 따라서 실제 엔티티매니저에 각각 라우팅한다고 한다.

그럼으로써 동시성 문제도 해결할 수 있고 나아가
Repository가 아닌 Service나 Test Class에서 의존주입 받은 entityManager를 통해서도 같은 트랜잭션 안에 있는 Repository가 사용하는 영속성 컨텍스트에 접근할 수 있는 것이다. (트랜잭션 단위로 라우팅하기 때문에)

profile
히히

0개의 댓글