2023. 6. 17. 17:22ㆍjpa
영속성 컨텍스트 : 엔티티를 영구 저장하는 환경
엔티티의 생명주기
비영속 : 엔티티를 생성후 persist를 하지않은 상태
영속 : 엔티티를 생성 후 persist를 해서 jpa과 엔티티를 관리하고 있는 상태
준영속: 영속 상태에서 detach를 해서 디비에는 값이 저장되어있지만 영속성 컨텍스트 안에는 존재하지 않아 jpa가 엔티티를 관리하지 않는 상태
삭제: 영속 상태인 엔티티를 삭제
영속성 컨텍스트의 이점
1. 1차 캐시 : 1차 캐시의 범위가 같은 트랜잭션 안에서만 발생하므로 크게 속도면에서 향상되지는 않는다. 단지 같은 엔티티를 여러번 조회할 경우 1번만 select문이 발생한다.
2. 동일성 보장 : 같은 트랜잭션 안에서 같은 엔티티를 조회할 경우 == 로 비교시 같다는 것을 통해 동일성이 보장된다는 것을 알 수 있다.
3. 트랜잭션을 지원하는 쓰기 지연 : 같은 트랜잭션에서 persist를 할 때 하나의 엔티티를 persist를 해서 commit을 통해 db로 flush 하는 것이 아닌 쓰기 지연 저장소에 persist를 저장을 하고 flush가 일어날 경우 한번에 db에 보내주는 것을 말한다.
4. 변경감지 (dirty checking) : jpa에서 수정을 할 때는 자바에서 컬렉션을 사용할 때처럼 setter를 통해 변경할 수 있는데 이 때 1차 캐싱에서 엔티티와 스냅샷을 비교하여 변경이 발생하지 않을 경우 아무일도 발생하지 않고 변경이 일어날 경우 update가 발생한다.
5. 지연로딩 : 뒤에서 자세히 설명
플러쉬 : 영속성 컨텍스트의 변경 내용을 db에 반영
플러쉬 발생
1. 변경 감지
2. 수정된 엔티티 쓰기 지연 저장소에 등록
3. 쓰기 지연 저장소의 쿼리를 db에 전송 (등록, 수정, 삭제 쿼리)
flush 하는 방법
1. flush - 직접 호출
2. 트랜잭션 commit - 플러쉬 자동 호출
3. jpql 실행 - 플러쉬 자동 호출
준영속 상태 만드는 방법
1. detach : 해당 엔티티만 준영속 상태로 만듬
2. clear : 영속성 컨스트를 완전히 초기화
3. close : 영속성 컨텍스트 종료
'jpa' 카테고리의 다른 글
| jpa - 다양한 연관관계 매핑 (0) | 2023.06.24 |
|---|---|
| jpa 연관매핑 기초 - 단방향, 양방향 (0) | 2023.06.22 |
| java: Compilation failed: internal java compiler error (0) | 2023.06.20 |
| jpa 엔티티 매핑 정리 (0) | 2023.06.20 |
| jpa 영속성 정리 (0) | 2023.01.08 |