엔티티(객체) 각 영속성 컨텍스트(JPA의 관리 영역)와 어떤 관계를 맺고 있느냐에 따라 상태가 나눱니다.
1. 비영속 (New / Transient)
영속성 컨텍스트와 아무런 관계가 없는 순수한 자바 객체 상태입니다.
- 상태: 막 new 키워드로 객체를 생성한 직후입니다.
- 특징: DB에 저장되지 않았고, JPA가 이 객체를 관리하지도 않습니다. 그냥 일반 객체일 뿐입니다.
- 비유: 식당에 들어가기 전, 집에서 "무엇을 먹을까?" 고민하며 혼자 메뉴를 적어보는 단계입니다.
Java
Member member = new Member(); // 비영속 상태
member.setName("홍길동");
2. 영속 (Managed)
엔티티가 영속성 컨텍스트에 저장되어 관리받는 상태입니다.
- 상태: em.persist(member)를 호출하거나 DB에서 조회해온 상태입니다.
- 특징:
- 이제부터 JPA가 이 객체의 변화를 감시합니다.
- 1차 캐시, 동일성 보장, 쓰기 지연, 변경 감지(Dirty Checking) 같은 혜택을 누립니다.2. 영속 (Managed)
- 상태: em.persist(member)를 호출하거나 DB에서 조회해온 상태입니다.
- 특징:
- 이제부터 JPA가 이 객체의 변화를 감시합니다.
- 1차 캐시, 동일성 보장, 쓰기 지연, 변경 감지(Dirty Checking) 같은 혜택을 누립니다.
- 엔티티가 영속성 컨텍스트에 저장되어 관리받는 상태입니다.
- Java
em.persist(member); // 이제 '영속' 상태 (JPA가 관리함)
3. 준영속 (Detached)
영속성 컨텍스트에 저장되었다가 분리된 상태입니다.
- 상태: em.detach(member)를 호출하거나, em.clear(), em.close()로 컨테이너를 비우면 발생합니다.
- 특징:
- 한번은 영속 상태였기 때문에 아이디(PK) 값을 가지고 있습니다.
- 하지만 이제 JPA가 관리하지 않으므로, 값을 수정해도 DB에 반영되지 않습니다.
Java
em.detach(member); // 영속성 컨텍스트에서 분리 (준영속 상태)
'개발 공부 > Java-Spring' 카테고리의 다른 글
| 스프링 부트 6개 도메인 통합 테스트 구축기: 인프라 격리부터 영속성 타이밍 버그 검거까지 (0) | 2026.05.27 |
|---|---|
| [Java] final, static, static final 차이점 완벽 정리 (0) | 2026.05.09 |
| Spring의 핵심, IoC와 DI: 제어의 역전과 의존성 주입 완벽 가이드 (0) | 2026.01.23 |
| 자바 접근 제어자및 스프링부트에서 사용예시 (0) | 2026.01.20 |
| [JPA] N+1 문제, 원인과 결과로 완벽하게 이해하기 (0) | 2026.01.20 |