[영속성 컨텍스트]

  • 영속성 컨텍스트는 논리적인 개념입니다.
  • 눈에 보이지 않습니다.
  • 엔티티 매니저를 통해서 영속성 컨텍스트에 접근합니다.

[엔티티의 생명주기]

  • 비영속(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에 대해 정리한 글입니다.