Written by
java-style
on
on
[JAVA] JPA 준영속 상태
[JAVA] JPA 준영속 상태
준영속 상태 란?
영속 상태의 엔티티가 영속성 컨텍스트에서 분리(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 쿼리가 실행되지 않는 것을 볼 수 있다.
( 코드 주석 참고 )
실행 예시
from http://eunji-dev.tistory.com/47 by ccl(A) rewrite - 2021-11-09 17:01:54