반응형
https://www.inflearn.com/course/ORM-JPA-Basic/dashboard
http://www.kyobobook.co.kr/product/detailViewKor.laf?mallGb=KOR&ejkGb=KOR&barcode=9788960777330
** JPA 에서 가장 중요한 부분 : jpa 동작 원리
1. 영속성 엔티티란?
- '엔티티를 영구 저장하는 환경'이라는 뜻
- EntityManager.persist(entity)
- 영속성 컨텍스트는 논리적 개념으로 눈에 보이지 않는다.
- Entity 매니저를 통해 접근
cf) 엔티티 생명 주기
- 비영속 (new/transient)
- 영속 컨텍스트에 속하지 않는, 객체를 생성만 한 상태
- 영속 (managed)
- persist 함수를 통해 엔티티 매니저가 영속 컨텍스트로 관리
- 커밋하는 시점에 디비와 연동됨
- 준영속 (detach) : 영속성 컨텍스트에서 삭제
- 삭제 (removed) : 디비에서 삭제?
App과 DB사이의 중간계층임
2. 영속성 컨텍스트의 사용 이점
- 1차 캐시 => 큰 성능상승은 없음
- 캐시에서 우선 조회하고 없으면 디비에서 조회
- 디비에서 조회 후 캐시에 저장
- 동일성(identity) 보장
- 캐시에서 가져오는거라 같은 엔티티 (Swallow Copy?)
- 트랜잭션 격리 수준을 DB가 아닌 애플리케이션 단위에서 가져옴
- == 는 true
- 트랙잭션을 지원하는 쓰기 지연 => 이점이 크진 않음
- persist하면 쓰기지연 저장소에 저장하고 insertSQL 작성
- 커밋 시점에 flush됨
- 쓰기지연 : 버퍼링을 모아서 write
- 변경 감지 ( dirty checking)
- set하면 persist/update하지 않아도 됌. 커밋시점에 엔티티 반영
- set을 두번해도 update 쿼리는 한번만 실행
- 1차 캐시의 스냅샷(최조 읽어온 시점의 값)과 비교함
- 지연 로딩
** FLUSH : 영속성 컨텍스트의 변경내용을 디비에 반영
- 영속성 컨텍스트를 비우는게 아니라 반영하는 것
- 순서
- 변경 감지
- 수정된 엔티티들을 지연 sql 저장소에 증록
- 쿼리를 db로 전송
- 호출방법
- 직접호출 : em.flush
- 자동호출 : commit , jpql 쿼리 실행(캐싱디비를 쓰지 않고 디비에 직접 접근하기 떄문에 초기화)
- 옵션
- AUTO
- COMMIT : 관계없는 테이블을 조회하거나 할 댸(사실상 별다른 이점 없음)
반응형
'Develope > DataBase' 카테고리의 다른 글
[JPA] 객체지향 쿼리 언어 (0) | 2021.09.26 |
---|---|
[JPA] 엔티티 매핑 (0) | 2021.08.17 |
[JPA] Spring + MariaDB + JPA 환경셋팅 (0) | 2021.06.23 |
[JPA] 1-3. ORM 이란? JPA 소개 (0) | 2021.05.30 |
[JPA] SQL을 직접 다룰 때 발생하는 문제점 (0) | 2021.05.29 |