본문 바로가기

Java

엔티티 생명주기


영속성 관리


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


1. 비영속(new / transient) : 영속성 컨텍스트와 전혀 관계가 없는 상태

2. 영속(managed) : 영속성 컨텍스트에 저장된 상태

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

4. 삭제(removed) : 삭제된 상태


entity 생명주기에 대한 이미지 검색결과



비영속

- 엔티티 객체를 생성했다. 지금은 순수한 객체상태이며, 아직 저장하지 않았다.

- 따라서 영속성 컨텍스트나 데이터베이스와는 전혀 관계가 없다. 이것을 비영속 상태라고 한다.

//객체를 생성한 상태(비영속)

Member member = new Member();

member.setId("member1");

member.setUsername("회원1");


영속

- 엔티티 매니저를 통해 엔티티를 영속성 컨텍스트에 저장하면 영속 상태라 한다.

- 결국 영속 상태라는 것은 엔티티 컨텍스트에 의해 관리되는 상태라는 것.


준영속

- 영속성 컨텍스트가 관리하던 엔티티를 더이상 관리하지 않으면 준영속 상태가 된다.

- 영속 상태의 특정 엔티티를 em.detach(), em.close(), em.clear()를 통해 준영속상태로 변경 할 수 있다.


삭제

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

rm.remove(member);


영속성 컨텍스트의 특징


1. 영속성 컨텍스트와 식별자 값

- 영속성 컨텍스트는 엔티티를 식별자값(@Id로 테이블 기본키와 맵핑항 값)으로 구분한다.

- 따라서 영속상태는 식별자 값이 반드시 있어야함. 만약 없다면 예외가 발생한다.


2. 영속성 컨텍스트와 데이터베이스 저장

- JPA는 보통 트랜잭션을 커밋하는 순간 영속성 컨텍스트에 새로 저장된 엔티티를 데이터베이스에 반영한다.

- 이를 플러시(flush)라고 함.


3. 영속성 컨텍스트가 엔티티를 관리함으로써 생기는 장점

- 1차 캐시

- 동일성 보장

- 트랜잭션을 지원

- 변경 감지

- 지연로딩



https://github.com/sungjaeHong/JPA