영속성 컨텍스트
> "엔티티를 영구 저장하는 환경"
- J2SE 환경 기준 -
EntityManager.persist(entity);
DB에 저장한다는 의미가 아니라 entity를 영속성 컨텍스트에 저장한다는 의미
엔티티 매니저를 통해 영속성 컨텍스트에 접근할 수 있다.
EntityManager와 영속성 컨텍스트가 1:1 관계이다.
엔티티의 생명주기
1. 비영속 상태
> 멤버 객체를 생성만한 상태
2. 영속 상태
> 객체 생성후 엔티티 매니저를 통해 persist해서 객체를 영속 컨텍스트에 넣는다.
3. 준영속 상태
> detach , 영속 상태의 엔티티가 영속성 컨텍스트에서 분리
4. 삭제 상태
> DB에서 객체를 삭제
영속성 컨텍스트의 이점 !!
1. 1차 캐시
key : pk
value : entity 자체
동일한 트랜잭션 안에서 조회를 할 때
먼저 1차 캐시에서 찾고 그 후에 DB를 조회하여 찾는다.
그리고 이를 1차 캐시에 저장한 후에 반환한다.
만약 다시 해당 객체를 찾으면 쿼리를 다시 안날려도 된다.
1차 캐시를 영속성 컨텍스트라고 보면된다.
2. 영속 엔티티의 동일성 보장
3. 트랜잭션을 지원하는 쓰기 지연
persist가 발생하면 1차 캐시에 저장하는 동시에 쓰기 지연 SQL 저장소에 insert SQL을 생성한다 .
모았다가 한번에 실행 가능
4. 변경 감지
JPA의 목적은 자바의 컬렉션을 다루는 것처럼 객체를 다루는 것이다.
변경을 했다면 update로 저장하지않아도 update문이 실행된다.
commit하면 flush가 발생한다.
그 후 엔티티와 스냅샷(최초의 상태)을 비교한다.
달라진 점이 있다면 update 쿼리를 쓰기지연 SQL 저장소에 넣는다.
5. 지연 로딩
'개발공부 > [Spring]김영한_ORM표준 JPA프로그래밍' 카테고리의 다른 글
[다대일, N:1]양방향 연관관계 설정하기 _Order와 Member (0) | 2022.09.01 |
---|---|
[애플리케이션 개발]persistence_entityManagerFactory, 엔티티 생성 (0) | 2022.08.23 |
[spring]JPQL이 뭔가요?(파라미터와 select) (0) | 2022.08.18 |
[spring] 양방향 연관관계&연관관계의 주인 (0) | 2022.08.18 |
[spring]단방향 연관관계 (0) | 2022.08.18 |