반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- JPA공부
- 코테준비
- 알고리즘공부
- 카프카
- 스프링공부
- 기술면접공부
- JPA 공부
- K8S
- 코테공부
- querydsl
- 자료구조공부
- 프로그래머스
- JPA
- Flutter
- 스프링
- JPA스터디
- 스프링부트공부
- nestjs스터디
- 자바공부
- 스프링 공부
- DDD
- 플러터 공부
- JPA예제
- Axon framework
- nestjs공부
- 스프링부트
- 플러터 개발
- 기술공부
- nestjs
- Kafka
Archives
- Today
- Total
DevBoi
[JPA] JPA 동작과정 (조회,저장, 수정) 본문
반응형
JPA 동작 과정
-저장 과정
JPA 의 경우 트랜잭션 실행 단위 안에서 동작한다.
엔티티를 조회,저장,수정등 작업이 일어나면 SQL문이 DB에 적용되는 것이 아니라
쓰기지연 SQL저장소라는 곳에 SQL이 쌓이게 된다.
이렇게 생성된 SQL문들은 트랜잭션 플러시가 일어나는 경우 DB에 쿼리를 보내게 된다.
-수정 과정
수정할 엔티티를 찾는다.
1차 캐시에 올라가고 영속상태가 된다.
영속성 컨텍스트가 관리하는 상태가 된다.
JPA는 데이터 베이스 트랜잭션 커밋 시점에 변경감지 기능을 사용하게 된다.
1차 캐시에 등록된 상태의 스냅샷과 해당 엔티티를 비교해서 변경내역을 확인하고 (변경감지, dirty checking)
update 쿼리를 쓰기지연 저장소에 저장하고
트랜잭션이 끝나기 전에 해당 쿼리를 날리고 커밋한다.
-조회과정
findById()의 경우, 영속성 컨텍스트를 먼저 찾고, 영속성 컨텍스트에 해당 엔티티가 있으면 그값을 바로 리턴한다.
반면 JPQL은 영속성 컨텍스트를 먼저 조회하지않고, 데이터베이스에 쿼리해서 결과를 가져온다.
그리고, 조회한 값을 영속성 컨텍스트에 저장을 시도한다.
그 시도에 중복된 엔티티가 있다면, 신규 데이터 조회값을 버린다.
반응형
'Develop > [JPA]' 카테고리의 다른 글
[JPA] 패치조인이란 (0) | 2022.03.20 |
---|---|
[JPA] N+1 문제란 (0) | 2022.03.18 |
[JPA] 영속성 컨텍스트란? (0) | 2022.03.17 |
[JPA] 엔티티 생명 주기 (0) | 2022.03.17 |
[JPA] JPA 관련 기초 개념 정리 (0) | 2022.03.17 |