JAVA

[JAVA] JPA 준영속 상태

응디 2021. 11. 9. 16:46

준영속 상태 란?

  • 영속 상태의 엔티티가 영속성 컨텍스트에서 분리(detached) 된 것
  • 영속성 컨텍스트가 제공하는 기능을 사용하지 못한다.

 

준영속 상태로 만드는 방법

  • em.detach(entity) : 특정 엔티티만 준영속 상태 전환
  • em.clear() : 영속성 컨텍스트를 완전히 초기화
  • em.close() : 영속성 컨텍스트를 종료함
Member member = em.find(Member.class, 150L);
member.setName("AAAAAAAAAA");

// 원래 같으면 find 에서 select후 setName에서 update쿼리가 생성되야하는데
// detach 선언으로 준영속상태가 되어 영속성 컨텍스트 기능을 상실 
// 따라서 update는 실행되지 않는다.
em.detach(member);

// 영속성 컨텍스트를 통으로 비워버림(1차 캐시 비워버림)
// clear 후 다시 Member를 조회하면 다시 DB에서 조회해야해서 select 문이 두개가 나감
em.clear();

System.out.println("=======================");

tx.commit(); // commit을 실행하면서 쿼리를 DB에 날림

※ 위에 코드 실행 결과 detach로 인해 준영속 상태가 되어 update 쿼리가 실행되지 않는 것을 볼 수 있다.

( 코드 주석 참고 )

실행 예시

 

'JAVA' 카테고리의 다른 글

[JAVA] JPA 필드와 컬럼 매핑  (0) 2021.11.10
[JAVA] JPA 엔티티 매핑 + DB 스키마 자동생성  (0) 2021.11.10
[JAVA] JPA 플러시(flush)  (0) 2021.11.09
[JAVA] JPA 영속성 관리  (0) 2021.11.09
[JAVA] JPA 애플리케이션 개발  (0) 2021.11.02