개발기록
JPA 엔티티 생명주기: Transient, Persistent, Detached 상태 본문
JPA(Java Persistence API)에서 엔티티 객체는 생명주기 동안 여러 상태를 거칩니다. 주요 상태로는 Transient, Persistent, Detached가 있으며, 추가로 Removed 상태도 존재합니다. 각 상태의 특징과 전환 과정을 살펴보겠습니다.
1. Transient (비영속)
- 정의: 엔티티 객체가 생성되었지만 아직 영속성 컨텍스트에 저장되지 않은 상태
- 특징:
- JPA가 이 객체를 관리하지 않음
- 데이터베이스와 연관이 없음
- 예시:
new키워드로 객체를 생성한 직후
User user = new User(); // Transient 상태
2. Persistent (영속)
- 정의: 엔티티 객체가 영속성 컨텍스트에 의해 관리되는 상태
- 특징:
- JPA가 이 객체를 관리함
- 데이터베이스에 저장되어 있거나, 저장될 예정
- 변경 감지(Dirty Checking), 지연 로딩 등의 기능 사용 가능
- 예시:
EntityManager.persist()호출 후, 또는 데이터베이스에서 조회한 직후
entityManager.persist(user); // Persistent 상태로 전환
User foundUser = entityManager.find(User.class, 1L); // 조회된 객체는 Persistent 상태
3. Detached (준영속)
- 정의: 한 번 영속 상태였다가 영속성 컨텍스트에서 분리된 상태
- 특징:
- JPA가 더 이상 이 객체를 관리하지 않음
- 식별자(ID)를 가지고 있음
- 변경 감지 등의 기능을 사용할 수 없음
- 예시:
EntityManager.detach()호출 후, 또는 영속성 컨텍스트가 종료된 후
entityManager.detach(user); // Detached 상태로 전환
// 또는
entityManager.close(); // 영속성 컨텍스트 종료 시 모든 엔티티가 Detached 상태가 됨
4. Removed (삭제)
- 정의: 엔티티 객체가 영속성 컨텍스트와 데이터베이스에서 삭제되기로 예정된 상태
- 특징:
- 트랜잭션 커밋 시 실제로 데이터베이스에서 삭제됨
- 예시:
EntityManager.remove()호출 후
entityManager.remove(user); // Removed 상태로 전환
상태 전환 다이어그램
다음은 JPA 엔티티 생명주기의 상태 전환을 보여주는 Mermaid 다이어그램입니다.

'Spring' 카테고리의 다른 글
| Spring Cloud Config와 Spring Cloud Bus를 사용한 설정 갱신 프로세스 (0) | 2024.08.29 |
|---|---|
| [SpringBoot] @NoargsConstructor(AccessLevel.PROTECTED) 와 @Builder (0) | 2021.08.03 |
| [Springboot] JWT(JSON Web Token) 란? (0) | 2021.06.04 |
| [Springboot] config에 대해서 (0) | 2021.06.04 |
| [Spring] POJO에 대해서 (0) | 2021.06.03 |
Comments