JPA

2-3. 준영속 상태

희구 2021. 8. 2. 22:29

• 영속 -> 준영속
em.persist ->영속상태가 된다.

em.find 등을 해서 jpa를 사용하여 조회했는데 얘가 영속상태에 없다? 그러면

디비에서 가져와서 올려 -> 그럼 이걸 영속상태라고 한다.

 

• 영속 상태의 엔티티가 영속성 컨텍스트에서 분리(detached)된 것을 준영속 상태라고 한다.

준영속 상태의 엔티티는 영속성 컨텍스트가 제공하는 기능을 사용 못함

• 영속상태의 엔티티를 준영속 상태로 만드는 방법은 크게 3가지가 있다.

1. em.detach(entity) : 특정 엔티티만 준영속 상태로 전환한다.
2. em.claer() : 영속성 컨텍스트를 완전히 초기화한다.
3. em.close() : 영속성 컨텍스트를 종료한다.

 

 

 

1. 엔티티를 준영속 상태로 전환: detach()

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

em.detach(member); //이제 영속성에서 떼어낸다

System.out.println("=================");

tx.commit(); /*그럼 이제 쟤를 jpa에서 관리하지 않기때문에 커밋을 해도 아무일도 일어나지 않아*/

image-20210802222550084

데이터를 변경했는데도 불구하고 select만 나오고 update쿼리는 나오지 않는다.

 

 

 

2. 엔티티를 컨텍스트 초기화: clear()

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

em.clear(); //통으로 다 날려버린다.

System.out.println("=================");

tx.commit(); /*완전 초기화 되기 때문에 커밋을 해도 아무일도 일어나지 않아*/

image-20210802222807065

데이터를 변경했는데도 불구하고 select만 나오고 update쿼리는 나오지 않는다.

clear()로 영속성 컨텍스트가 초기화되기때문에 영속성 컨텍스트를 제거하고 새로 만든 것과 같다.

 

 

3. 영속성 컨텍스트 종료: close()

 

 

 

 

 

 

 

[출처] 김영한님의 자바 ORM 표준 JPA 프로그래밍 - 기본편

(https://www.inflearn.com/course/ORM-JPA-Basic/dashboard)