반응형
준영속은 영속 상태의 엔티티가 영속성 컨텍스트에서 분리된 것을 준영속 상태라고 한다. 따라서 준영속 상태의 엔티티는 영속성 컨텍스트가 제공하는 기능을 사용할 수 없다.
영속상태를 준영속 상태로 만드는 방법
영속상태를 준영속으로 만드는 방법은 3가지이다.
- em.detach(entity) : 특정 엔티티만 준영속 상태로 전환한다.
- em.clear() : 영속성 컨텍스트를 완전히 초기화한다.
- em.close() : 영속성 컨텍스트를 종료한다.
엔티티를 준영속 상태로 전환: detach()
public void testDetached() {
...
//회원 엔티티 생성, 비영속 상태
Member memberA = new Member();
memberA.setId("memberA");
//회원 엔티티 영속 상태
em.persist(memberA);
//회원 엔티티 영속성 컨텍스트에서 분리, 준영속 상태
em.detach(memberA);
...
}
예제 코드를 보면 회원 엔티티를 생성하여 영속화한 다음 em.detach()를 호출하여 비영속상태로 만들었다. 이것이 의미하는 바는 영속성 컨텍스트에서 더 이상 해당 엔티티를 관리하지 말라는 것이다. 이 메소드를 호출하는 순간부터 1차 캐시, 쓰기지연 SQL 저장소까지 엔티티를 관리하기 위한 모든 정보가 제거된다.
영속성 컨텍스트 초기화: clear()
em.detatch()가 특정 엔티티 하나를 준영속 상태로 만들었다면 em.clear()는 영속성 컨텍스트를 초기화해서 그 안에 모든 엔티티를 준영속 상태로 만든다.
영속성 컨텍스트 종료: close()
em.close()로 말 그대로 영속성 컨텍스트를 종료시킴으로써 관리하던 영속 상태의 엔티티를 모두 준영속 상태로 변경된다.
개발자가 직접 준영속상태로 변경하는 경우는 매우 드물다.
반응형
'Framework > JPA' 카테고리의 다른 글
[JPA] 엔티티 매핑 - 데이터베이스 스키마 자동 생성 (0) | 2024.03.14 |
---|---|
[JPA] 엔티티 매핑 - 객체와 테이블 매핑 (0) | 2024.03.14 |
[JPA] 플러시(flush) (0) | 2024.03.13 |
[JPA] 영속성 컨텍스트의 특징 (0) | 2024.03.12 |
[JPA] 영속성 컨텍스트 (0) | 2024.03.12 |