Close
Close full mode
logo만렙 개발자 키우기

(3) 엔티티의 생명주기

Git RepositoryEdit on Github
Last update: a year ago by nowwaterReading time: 2 min

엔티티의 4가지 상태

비영속(new/transient)영속성 컨텍스트와 전혀 관계가 없는 상태
영속(managed)영속성 컨텍스트에 저장된 상태
준영속(detached)영속성 컨텍스트에 저장되었다가 분리된 상태
삭제(removed)삭제된 상태

생명 주기

image

비영속

  • 엔티티 객체를 생성하면 순수한 객체 상태이며 아직 저장되지 않은 상태이다.
  • 영속성 컨텍스트나 데이터베이스와 상관이 없다.
// 객체를 생성한 상태(비영속)
Member member = new Member();
member.setId(100L);
member.setUsername("회원1");

em.persist() 호출 전, 비영속 상태

image


영속

  • 엔티티 매니저를 통해서 엔티티를 영속성 컨텍스트에 저장한 상태
  • 영속성 컨텍스트가 관리하는 엔티티를 영속 상태라 한다.
  • 회원 엔티티 : 비영속 상태 => 영속 상태
  • em.find()JPQL 을 사용해서 조회한 엔티티도 영속 상태이다
// 객체를 저장한 상태(영속)
em.persist(member);

em.persist() 호출 후, 영속상태

image


준영속

  • 영속성 컨텍스트가 관리하던 영속 상태의 엔티티를 영속성 컨텍스트가 관리하지 않으면 준영속 상태
  • em.detach() 를 호출하여 특정 엔티티를 준영속 상태로 만들 수 있다.
  • em.close() 로 영속성 컨텍스트를 닫거나, em.clear()를 호출해서 영속성 컨텍스트를 초기화해도 영속성 컨텍스트가 관리하던 영속 상태의 엔티티는 준영속 상태가 된다.
// 회원 엔티티를 영속성 컨텍스트에서 분리, 준영속 상태
em.detach(member);

삭제

엔티티를 영속성 컨텍스트와 데이터베이스에서 삭제

// 객체를 삭제한 상태(삭제)
em.remove(member);
🚀 JPA — Previous
(2) 영속성 컨텍스트란
Next
(4) 영속성 컨텍스트의 특징