영속과 준영속의 개념 이해하기

인프런 강의 참고

엔티티의 생명주기 (Entity LifeCycle)

그림 추가

영속 상태와 준영속 상태

준영속 상태로 만드는 방법 (영속 -> 준영속)

  1. entityManager.detach(entity): 특정 엔티티만 준영속 상태로 전환
  2. entityManager.clear(): 영속성 컨텍스트를 완전히 초기화
  3. entityManager.close(): 영속성 컨텍스트를 종료

detach

// 영속 상태 (Persistence Context 에 의해 Entity 가 관리되는 상태)
Member findMember = entityManager.find(Member.class, 150L);
findMember.setName("AAAAA");

entityManager.detach(findMember); // 영속성 컨텍스트에서 떼넨다. (더 이상 JPA 의 관리 대상이 아님.)

tx.commit(); // DB에 insert query 가 날라가는 시점 (아무 일도 발생하지 않음.)

clear

// 영속 상태 (Persistence Context 에 의해 Entity 가 관리되는 상태)
Member findMember = entityManager.find(Member.class, 150L);
findMember.setName("AAAAA");

entityManager.clear(); // 영속성 컨텍스트를 완전히 초기화

Member findMember2 = entityManager.find(Member.class, 150L); // 간은 Entity 를 다시 조회

tx.commit(); // DB에 insert query 가 날라가는 시점 (아무일도 발생하지 않음.)

close

관련된 Post

Reference