본문 바로가기

JPA/영속성 관리

#02 영속성 컨텍스트 / 엔티티의 생명주기

Index

  • 영속성 컨텍스트란?
  • 엔티티의 생명주기

영속성 컨텍스트란?

영속성 컨텍스트(Persistence context) 란 JPA를 이해하는데 가장 중요한 용어로서 이를 우리말로 해석하자면 '엔티티를 영구 저장하는 환경' 이라는 뜻으로 책에서는 이야기 한다.

 

em.persist(member);      ( 지난 포스팅을 보면 해당 코드를 알수 있다. 간다한게 em은 EntityManager 객체이다.)

 

우리는 회원Entity(member)를 저장 한다라고 생각할 수 있는데 정확하게는 엔티티 매니저를 사용해서 회원 엔티티를 영속성 컨텍스트에 저장한다. 영속성 컨텍스트는 논리적인 개념으로 엔티티 매니저를 생성할 때 하나 만들어진다. 그리고 EntityManager를 통해서 영속성 컨텍스트에 접근하고 관리할 수 있다.

 

참고 : 여러 엔티티매니저가 같은 영속성 컨텍스트에 접근할 수도 있다고한다. 그러나 지금은 어려울 수 있으니 엔티티메니저 하나에 영속성 컨텍스트 하나가 만들어진다고 생각하면됨. 책에서는 11장... (지금은 3장) 에서 다룬다고 한다. 

엔티티의 생명주기

비영속 : 영속성 컨텍스트와 전혀 관계가 없는 상태

영속 : 영속성 컨텍스트에 저장되고 관리되는 상태

준영속 : 영속성 컨텍스트에 저장되었다가 분리된 상태

삭제 : 삭제된 상태

엔티티 생명주기

비영속 - Entity 객체를 생성하는 단계에서는 순수 객체상태이므로 영속성 컨텍스트에 의해 관리되지 않는다.

// 객체를 생성한 상태 (비영속)
Memeber member = new Member();
member.setId("member1");        // 아무일도 일어나지 않는다. 단지 맴버 변수에 값을 넣어준것 뿐.

영속 - EntityManager에게 넣어준 Entity는 영속상태라 한다. 

em.persist(member);

 

준영속 - 관리 중이던 Entity(member)를 영속성 컨텍스트에서 분리하고 준영속 상태가 된다.

em.detach(member); 

 

삭제 - Entity(member)를 컨텍스트와 데이터베이스에서 삭제한다.

em.remove(member); 

 

영속상태를 잘 구분해서 사용해야 될것 같다는 당연한?? 생각이 든다. 다음 포스팅은 영속성 컨텍스트의 특징들을 자세하게 살펴볼 예정이다! 내일은 토요일! ~~ 공부할 시간 많아서 행복해!