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()
영속성 컨텍스트 종료한다.