준영속 상태

2023. 11. 20. 23:31JAVA/스프링 데이터 JPA

준영속 상태

- 이해하기 쉽지는 않음

- 영속 -> 준영속

영속 : 1차 캐시에 올라간 상태

- 영속 상태의 엔티티가 영속성 컨텍스트에서 분리

 

준영속 상태로 만드는 법

- em.detach(entity) : 특정 엔티티만 준영속 상태로 전환

- em.clear() : 영속성 컨텍스트를 완전히 초기화

- em.close() : 영속성 컨텍스트를 종료

try {
	Member member = em.find(Member.class, 150L);
    member.setName("AAAAA");
    
    em.detach(member); // <- JPA에서 더이상 관리하지 않음 -> 아무일도 일어나지 않음
    
    System.out.println("====================");
    tx.commit();
} catch (Exception e) {
	em.close();
}

 

결과

Hibernate:
	select
    	member0_.id as id1_0_0,
        member0_.name as name2_0_0_
    from
    	Member member0_
    where
    	member0_.id=?
====================

 

쿼리만 나가고 Update Query가 나가지 않는다. Detach를 했기 때문이다.

사실 직접 쓸 일은 거의 없긴 하다.

 

다음과 같은 방법으로도 할 수 있다.

try {
	Member member = em.find(Member.class, 150L);
    member.setName("AAAAA");
    
    em.clear();
    
    Member member = em.find(Member.class, 150L);

    System.out.println("====================");
    tx.commit();
} catch (Exception e) {
	em.close();
}

위 코드는 통으로 지운다.

 

아직까지는 준영속 상태에 대해서 깊게 이해할 필요는 없다.

'JAVA > 스프링 데이터 JPA' 카테고리의 다른 글

데이터베이스 스키마 자동 생성  (0) 2023.12.27
객체와 테이블 매핑  (0) 2023.12.24
플러시  (0) 2023.11.20
영속성 컨텍스트 2  (2) 2023.11.12
영속성 컨텍스트 1  (0) 2023.11.12