영속성 컨텍스트와 Transaction의 관계
2022. 3. 23. 13:51ㆍBackEnd(Java)/Spring Data JPA
프로젝트를 진행하면서 영속성 콘텍스트를 정확히 알고 쓰지 못해 생긴 이슈에 대해서 정리하고자 한다.
결론부터 말하자면, 영속성 컨텍스트와 트랜잭션 생존 범위가 동일하고, 트랜잭션이 같으면 같은 영속성 컨텍스트를 사용한다. 그러나 트랜잭션이 다르면 다른 영속성 컨텍스트를 사용하게 된다(그림 1참고)
이 개념을 이해하고 꼭 개발하도록 하자!!!!!!!(정확히 이해를 하지 못한채 API 서버 개발할 때 잦은 로직 변경이 있었음 ㅠㅠ)
이슈
- 하나의 트랜잭션이 끝난 후 그 값을 다른 트랜잭션에서 연산(persist, remove... 등)하려고 하면 영속화되지 않은 엔티티를 어떠한 행위를 하려고 해서 오류가 뜨게 된다.
해결방법
- 다른 트랜잭션에서 연산하기 전에 em.find를 통해 영속성 컨텍스트에서 가져와서 연산 행위를 한다.
- 하나의 트랜잭션에서 연산을 하여 요청을 처리한다.
참조 문서
반응형
'BackEnd(Java) > Spring Data JPA' 카테고리의 다른 글
생성 시간, 수정 시간 자동으로 값 넣기 (0) | 2022.03.29 |
---|---|
JPA - Mysql 컬럼명 대문자 생성이 안될 때 (0) | 2022.03.24 |
JPA - Mysql 컬럼 매핑 (0) | 2022.03.24 |
@Not Null vs @Column(nullable = false) 차이 비교 (0) | 2022.03.24 |
하이버네이트 자동 키 생성 전략 (0) | 2022.03.24 |