영속성 컨텍스트란?
: 엔티티를 영구 저장하는 환경
영속성 컨텍스트의 이점
- 1차 캐시
- 영속성 컨텍스트에 존재한다면 조회 시 SQL을 날리지 않는다.
- 동일성 보장
- JPA가 영속 엔티티의 동일성을 보장해준다.
가능한 이유는 1차 캐시에서 조회해오기 때문에, 동일한 지 확인 가능하다.
동일한 영속성 컨텍스트 내에서 같은 엔티티 키를 가진 두 객체는 같은 자바 객체이다.
- JPA가 영속 엔티티의 동일성을 보장해준다.
- 트랜잭션을 지원하는 쓰기 지연
- 커밋하기 전까지는 데이터베이스에 Insert SQL을 보내지 않는다.
- 변경 감지
- 지연 로딩
영속성 컨텍스트 flush
flush : 영속성 컨텍스트의 변경 내용을 데이터 베이스에 반영
- em.flush() - 직접 호출
- 트랜잭션 커밋 - 플러시 자동 호출
- JPQL 쿼리 실행 - 플러시 자동 호출
플러시 모드 옵션
FlushModeType.AUTO : 커밋이나 쿼리를 실행할 때 플러시 (기본값)
FlushModeType.COMMIT : 커밋할 때만 플러시
엔티티의 생명 주기
- 비영속(new / transient) : 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태
// 객체를 생성만 한 상태
Member member = new Member();
member.setId(100L);
member.setName("HelloJpa");
- 영속 (managed) : 영속성 컨텍스트에 관리되는 상태
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
//객체를 저장한 상태(영속)
em.persist(member);
- 준영속 (detached) : 영속성 컨텍스트에 저장되었다가 분리된 상태
//회원 엔티티를 영속성 컨텍스트에서 분리, 준영속 상태
//특정 엔티티만 준영속 상태로 전환
em.detach(member);
//영속성 컨텍스트를 완전히 초기화
em.clear()
//영속성 컨텍스트를 종료
em.close()
- 삭제 (removed) : 삭제된 상태
//객체를 삭제한 상태(삭제)
em.remove(member);
'JPA' 카테고리의 다른 글
| 다양한 연관관계 매핑 (0) | 2024.08.26 |
|---|---|
| 연관관계 매핑 기초 (2) | 2024.08.26 |
| 기본키 매핑 (0) | 2024.08.25 |
| 필드와 컬럼 매핑 (0) | 2024.08.25 |
| 엔티티 매핑 (1) | 2024.08.25 |
