준영속 상태 란?
- 영속 상태의 엔티티가 영속성 컨텍스트에서 분리(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 |