[영속성 컨텍스트]
- 영속성 컨텍스트는 논리적인 개념입니다.
- 눈에 보이지 않습니다.
- 엔티티 매니저를 통해서 영속성 컨텍스트에 접근합니다.
[엔티티의 생명주기]
- 비영속(new/transient) : 영속성 컨텍스트와 전혀 관게가 없는 새로운 상태
Member member = new Member();
member.setId("member1");
member.setUsername("회원1");
코드 예시와 같이 자바에서 단순히 객체만 생성한 상태일 때입니다.
- 영속(managed) : 영속성 컨텍스트에 관리되는 상태
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
em.persist(member);
객체를 저장한 상태입니다.
- 준영속(detached) : 영속성 컨텍스트에 저장되었다가 분리된 상태
em.detach(member);
detach 메소드를 통해서 엔티티를 영속성 컨텍스트에서 분리할 수 있습니다.
- 삭제(removed) : 삭제된 상태
em.remove(member);
엔티티를 삭제한 상태입니다.
[영속성 컨텍스트의 이점]
- 1차 캐시
- 동일성 보장
- 트랜잭션을 지원하는 쓰기 지연
- 변경 감지(Dirth Checking)
- 지연 로딩(Lazy Loading)
[플러시의 개념과 호출 방법]
플러시는 영속성 컨텍스트의 변경 내용을 데이터베이스에 반영하는 것입니다.
다음과 같은 상황에서 플러시가 발생합니다.
- em.flush() : 강제로 직접 호출하는 경우
- commit : 커밋할 때 자동으로 호출
- JPQL 쿼리 실행 : 플러시 자동으로 호출
본 게시글은 우아한형제들 김영한님의 강의 ‘자바 ORM 표준 JPA 프로그래밍 - 기본편’을 들으면서 JPA에 대해 정리한 글입니다.