Jpa
Spring Repository 와 Entity 영속성 컨텍스트의 관계 파악
무대포 개발자
2020. 11. 19. 22:17
728x90
반응형
Spring Repository 와 Entity 영속성 컨텍스트의 관계 파악
Spring Repository 와 EntityManager 관계
- 하나의 서비스에서 (같은 스레드) 여러 개의 repository 를 호출한다고 해보자.
- 2개의 repository 는 1개의 EntityManager 를 공유하게 됨.
- 같은 스레드에서 순차적으로 호출할테니 동시성 문제는 없겠지.
Spring 에서 Entity 변경 시, 일어나는 과정
- Controller —> Service —> Repository select, save 호출 이라고 가정.
- Controller 에는 Transaction 설정이 안돼있다면 Repository.save 를 호출하는 순간 Transaction 이 만들어지고 자동으로 커밋이 이루어질 것이다.
- 왜냐하면 Spring Data Jpa 에서 제공해주는 JpaRepository 구현체는 SimpleJpaRepository 이며, save 메소드에는 @Transactional 이 설정돼있다.
- 여기서 주의해야하는 점이. find —> 데이터 수정 —> save 순서가 아니라. save —> find —> 데이터 수정 순으로 이루어진다면 update 가 안일어난다. 왜냐하면 save 안에만 @Transactional 이 설정되있기 때문.