Language/Java

엔티티의 생명주기

JUNGKEUNG 2022. 10. 10. 19:32
반응형

엔티티는 4단계의 생명 주기

  • 비영속 (new/transient)
  • 영속 (managed)
  • 준영속 (datached)
  • 삭제 (removed)

 

영속성 관리

 

비영속 (new/transient)

비영속 상태는 객체를 새로 생성한 상태이다. JPA와 전혀 관계없이 객체만 생성한 상태이다.

Member member = new Member(1L,"test"); //member는 비영속 상태

영속 상태가 아니므로 당연히 영속성 컨텍스트에 의해 관리되지 않으며, 1차 캐시, 변경감지등의 기능이 적용되지 않는다.

 

 

 

영속 (managed)

영속성 컨텍스트에 의해서 관리되어지는 상태이다.

 

생성한 객체를 em.persist()를 통해 영속성 컨텍스트에 저장하거나, 혹은 em.find()를 통해 DB에서 엔티티를 조회하면 영속성 컨텍스트에 저장되어 관리되어지므로 이때 영속 상태가 된다.

Member member = new Member(1L,"test");

em.getTransaction().begin();

em.persist(member); //member는 영속 상태가 된다

 

 

준영속 (datached)

영속성 컨텍스트에 저장되었다가 분리된 상태로 현재는 영속 상태가 아닌 상태이다.

따라서 영속성 컨텍스트가 제공하는 기능을 사용하지 못한다.

Member member = new Member(1L, "test"); //member는 비영속 상태
em.getTransaction().begin();
em.persist(member); //member는 영속 상태가 됨



em.detach(member); // 특정 엔티티만 준영속 상태로 전환

 

준영속과 비영속의 차이점

준영속과 비영속의 차이는 바로 영속상태가 되어본 경험이다.

 

영속상태가 되기 위해서는 식별자가 필요하다. 따라서 준영속 상태의 엔티티는 식별자가 존재한다는 것이 보장되지만 비영속 상태의 엔티티는 식별자가 존재할수도, 존재하지 않을수도 있다.

 

 

삭제 (removed)

1차캐시와 데이터베이스에서 모두 삭제된 상태이이다.

em.remove(member);

 

 

 

참고


 

자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런 | 강의

JPA를 처음 접하거나, 실무에서 JPA를 사용하지만 기본 이론이 부족하신 분들이 JPA의 기본 이론을 탄탄하게 학습해서 초보자도 실무에서 자신있게 JPA를 사용할 수 있습니다., - 강의 소개 | 인프런

www.inflearn.com

 

'Language > Java' 카테고리의 다른 글

Eclipse Svn 설치  (0) 2022.10.28
Eclipse에 Azure 설치 하기  (0) 2022.10.27
긴 매개변수 목록  (0) 2022.08.15
긴 함수(2)  (0) 2022.08.14
[리팩토링] 긴 함수  (0) 2022.08.06