[스프링부트와 aws로 혼자 구현하는 웹서비스]
를 공부하며 Chapter3에서 "영속성 컨텍스트" 라는 개념을 배워
보다 자세히 정리하고자 한다!🥰
생성되는 시점에 DB 커넥션 풀을 생성해 둔 후, 고객의 요청이 들어올 때마다 엔티티 매니저를 생성
특정 작업을 위해 데이터베이스에 액세스하는 역할을 담당
엔티티를 DB 에 등록/수정/삭제/조회(CRUD)를 담당, 엔티티와 관련된 일을 처리하는 엔티티 관리자
DB 연결이 필요한 시점(보통 트랜잭션이 시작되는 경우)에 커넥션 풀에 있는 connection을 얻음
엔티티를 식별자 값(@id로 테이블의 기본 키와 매핑한 값)으로 구분한다.
따라서 영속 상태는 식별자 값이 반드시 있어야 함! 없으면 예외발생.
엔티티 객체를 생성했지만 아직 영속성 컨텍스트에 저장하지 않은 상태
Member member = new Member();
엔티티 매니저를 통해서 엔티티를 영속성 컨텍스트에 저장한 상태
영속성 컨텍스트에 의해 관리된다는 의미
em.persist(member);
영속성 컨텍스트에 저장되었다가 분리된 상태
영속성 컨텍스트가 관리하던 영속 상태의 엔티티 더이상 관리하지 않으면 준영속 상태가 된다.
특정 엔티티를 준영속 상태로 만드려면 em.datach()를 호출하면 됨~
// 엔티티를 영속성 컨텍스트에서 분리해 준영속 상태로 만든다.
em.detach(member);
// 비우거나 종료해도 관리되던 엔티티는 준영속 상태가 된다.
em.claer();
em.close();
엔티티를 영속성 컨텍스트와 데이터베이스에서 삭제함
em.persist(member);
1차 캐시
동일성 보장
트랜잭션을 지원하는 쓰기 지연
변경 감지
지연로딩
1. 엔티티 (Entity) 와 엔티티 매니저 (Entity Manager)
JPA 영속성 컨텍스트란?
[JPA] 영속성 컨텍스트란?