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 이 설정되있기 때문.
Reference
'Jpa' 카테고리의 다른 글
spring data jpa pk 없이 조회하는법 (0) | 2020.11.26 |
---|---|
JPA, Hibernate, Spring Data Jpa 관계 정리 (0) | 2020.11.21 |
엔티티 매니저 왜 thread-safe 하도록 해야하는지? (0) | 2020.11.18 |
MyBatis, Jpa 2개를 동시에 처리하는 트랜잭션 매니저 (0) | 2020.10.21 |
spring-boot Jpa 복합키 설정 Embedded (0) | 2020.09.06 |
댓글