영속성 컨텍스트
엔티티를 영구 저장하는 환경
- JPA를 이용하는데 가장 중요한 용어
- EntityManager.persist(entity)
- 영속성 컨텍스트는 논리적인 개념(눈에 보이지 않는다)
- 엔티티 매니저를 통해 영속성 컨텍스트에 접근
엔티티의 생명주기
- 비영속 : 영속성 컨텍스트와 전혀 관계없는 새로운 상태
- Member member = new Member("member1", "회원1");
- 영속 : 영속성 컨텍스트에 관리되는 상태
- em.persist(member);
- 준영속 : 영속성 컨텍스트에 저장되었다가 분리된 상태
- // 회원 엔티티를 영속성 컨텍스트에서 분리 em.detach(member);
- 삭제 : 삭제된 상태
- em.remove(member)
영속성 컨텍스트의 이점
- 1차 캐시(영속성 컨텍스트라고 이해해도 된다)
- 엔티티 조회
- 동일성 보장
- 트랜잭션을 지원하는 쓰기지연 (쿼리를 한번에 보낼 수 있다)
- INSERT쿼리가 쓰기지연 SQL 저장소에 저장된다.
- flush시 저장된 쿼리 실행 (DB 저장)
- 변경 감지
- UPDATE 쿼리가 생성된 후 쓰기지연 SQL 저장소에 저장됨
- Member findMember = em.find(Member.class, "member1"); // 1차 캐시에서 가져옴 findMember.setName("미키");
- 지연 로딩
플러시
영속성 컨텍스트의 변경내용을 DB에 반영
- 변경 감지
- 쓰기지연 SQL 저장소에 변경쿼리 등록
- 저장된 쿼리를 DB에 전송(등록, 수정, 삭제)
플러시 하는방법
- 직접 호출 : em.flush()
- 자동호출
- 트랜잭션 커밋 : tx.commit()
- JPQL 쿼리 실행
em.persist(memberA); em.persist(memberB); em.persist(memberC); // JPQL query = em.createQuery("select m from Member m", Member.class); List<Member> members = query.getResultList();
준영속 상태
준영속? 영속 → 준영속
준영속 상태로 만드는법
- em.detach(entity)
- em.clear() : 영속성 컨텍스트(전체)를 완전히 초기화
- em.close() : 영속성 컨텍스트 종료
'공부 > Spring' 카테고리의 다른 글
[JPA] 연관관계 매핑 기초 (0) | 2022.07.02 |
---|---|
[JPA] 엔티티 매핑 (0) | 2022.07.02 |
JPA 시작하기 (0) | 2022.06.20 |
JPA 소개 (0) | 2022.06.20 |
[chap17] 프로필과 프로퍼티 (0) | 2022.06.09 |
댓글