티스토리 뷰

JPA

[JPA] 준영속 상태(detach)

hyuuny 2022. 1. 19. 09:00

준영속 상태

준영속 상태란, 영속상태의 엔티티가 영속성 컨텍스트에서 분리된 것이다. 준영속 상태가 되면 영속성 컨텍스트가 제공하는 기능(dirty checking)을 사용하지 못한다.

 

준영속 상태로 만드는 방법

em.detach(entity)

특정 엔티티만 준영속 상태로 전환한다.

Member findMember = em.find(Member.class, 2L); // 현재 member의 name은 hello이다.
findMember.setName("hyuuny");

// findMember를 준영속 상태로 변경한다.
em.detach(findMember);

System.out.println("member : " + findMember);

tx.commit();

findMember의 name을 "hyuuny"로 변경하였지만, commit()전에 준영속 상태가 되어 update 쿼리를 날리지 않는다.

  • dirty checking X

 

em.clear()

영속성 컨텍스트를 완전히 초기화한다.

// 영속 
// 1번째 select query
Member findMember = em.find(Member.class, 2L);
findMember.setName("hyuuny");

// 영속성 컨텍스트 초기화
em.clear();

// select query 발생 
// 2번째 select query
Member reFindMember = em.find(Member.class, 2L);

System.out.println("member : " + findMember);

tx.commit();

clear()를 사용해서 영속성 컨텍스트를 초기화 했기 때문에 객체를 find할 때 다시 select 쿼리를 날린다

 

em.close()

영속성 컨텍스트 종료한다.

'JPA' 카테고리의 다른 글

[JPA] 객체와 테이블 매핑  (0) 2022.01.24
[JPA] 플러시(flush)  (0) 2022.01.19
[JPA] 영속성 컨텍스트(persistent-context)  (0) 2022.01.19
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함