-
[Spring] JPA Entity 생명주기 4단계Spring 2025. 5. 7. 16:15#생명주기 4단계
💡 Spring 정리: 생명주기 4단계
📘 개념 정리
JPA에서 Entity는 단순한 java 객체가 아니라 DB와 연결된 상태에 따라 생명주기가 나뉜다.
🔄 동작 흐름
단계 상태 설명 1️⃣ 비영속 (Transient) 새로 new로 만든 객체, 아직 JPA가 모름 2️⃣ 영속 (Persistent) em.persist(entity) 하면 영속성 컨텍스트에 등록 3️⃣ 준영속 (Detached) em.detach() 또는 트랜잭션 종료 시 관리 대상 아님 4️⃣ 삭제 (Removed) em.remove() 호출, flush 시 delete SQL 나감 Member member =new Member("Kim"); // 1️⃣ 비영속 em.persist(member); // 2️⃣ 영속 em.detach(member); // 3️⃣ 준영속 em.remove(member); // 4️⃣ 삭제 예약💡 상태별 주요 특징
1️⃣ 비영속
- 단순 POJO
- DB와 아무 연결 없음
- persist() 해야 영속됨
2️⃣ 영속
- 1차 캐시에 저장됨
- Dirty Checking 대상
- flush 시 DB 반영됨
3️⃣ 준영속
- 컨텍스트 관리 X
- Lazy 로딩 실패 가능 (Exception 발생)
- 변경해도 반영 안 됨
4️⃣ 삭제
- 아직 DB에서 삭제 안 됨
- flush() 또는 commit 시 delete SQL 날림
⚠️ 실수 및 주의사항
- em.persist()만으로 DB 반영된다고 착각
→ flush 필요 - detach() 했는데 Lazy 로딩 접근
→ LazyInitializationException - 준영속 상태에서 set() 호출했지만 DB에 반영 안 됨
→ dirty checking 안 됨
✨ 팁 & 인사이트
- JPA는 객체 상태에 따라 관리 여부가 달라진다.
- 반드시 영속 상태여야 변경 감지, Lazy 로딩, DB 반영이 가능하다.
- 생명주기는 영속성 컨텍스트를 기준으로 구분된다.// 예시 코드@PostConstructpublic void init() { System.out.println("초기화");}'Spring' 카테고리의 다른 글
[Spring] Dirty Checking (0) 2025.05.07 [Spring] Flush 시점 (0) 2025.05.07 [Spring] 연속성 컨텍스트 (0) 2025.05.07 [Spring] Convert VS Formatter (1) 2025.04.18 [Spring] Spring Formatter (0) 2025.04.18