twocowsong

엔티티의 생명주기 본문

IT/JPA

엔티티의 생명주기

WsCode 2022. 5. 1. 14:14

깃허브 정리 URL : https://github.com/sWineTake/jpa.git

 

GitHub - sWineTake/jpa: 자바 ORM 표준 JPA 프로그래밍 - 김영한

자바 ORM 표준 JPA 프로그래밍 - 김영한. Contribute to sWineTake/jpa development by creating an account on GitHub.

github.com

 

엔티티에는 4가지 상태가 존재합니다.

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

- 영속 : 영속성 컨텍스트에 저장된 상태

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

- 삭제 : 삭제된 상태

 

비영속

(New) 엔티티 객체를 생성했으며 지금은 순수한 객체 상태이며 아직 저장하지 않았습니다.

따라서 영속성 컨텍스트나 DB와는 전혀 관련이 없습니다.

이것을 비영속 상태라고 합니다. 코드는 아래와 같습니다.

// 객체를 생성한 상태(비영속)
Member member = new Member();
member.setId("member_id_1");
member.setUsername("홍길동");

 

 

영속

(Managed) 엔티티 매니저를 통해서 엔티티를 영속성 컨텍스트에 저장했습니다.

이렇게 영속성 컨텍스트가 관리하는 엔티티를 영속 상태라고 합니다.

em.persist(member);

이제 회원 엔티티는 비영속 상태에서 영속 상태가 되었습니다.

결국 영속 상태라는 것은 영속성 컨텍스트에 의해 관리된다는 뜻입니다.

그리고 em.find()나 JPQL을 사용해서 조회한 엔티티 영속성 컨텍스트가 관리하는 영속 상태입니다.

 

 

준영속

영속성 컨텍스트가 관리하던 영속 상태의 엔티티를 관리하지않으면 준영속 상태가 됩니다.

특정 엔티티를 준영속 상태로 만들려면 em.detach()를 호출하면 됩니다.

 

em.close()를 호출해서 영속성 컨텍스트를 닫거나 em.clear()를 호출해서 영속성 컨텍스트를 초기화해도 영속성 컨텍스트가 관리하던 영속 상태의 엔티티는 준영속 상태가 됩니다.

// 회원 엔티티를 영속성 컨텍스트에 분리하여 준영속상태로 만들게됩니다.
em.detach(member);

 

 

삭제

엔티티를 영속성 컨텍스트와 DB에서 삭제합니다.

// 객체를 삭제한 상태(삭제)
em.remove(member);

 

'IT > JPA' 카테고리의 다른 글

엔티티 컨텍스트의 1차 캐시  (0) 2022.05.02
영속성 컨텍스트의 특징  (0) 2022.05.01
영속성 컨테스트  (0) 2022.05.01
EntityManagerFactory와 EntityManager  (0) 2022.04.30
JPQL  (0) 2022.04.29