ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Spring] JPA Entity 생명주기 4단계
    Spring 2025. 5. 7. 16:15

    minecraft-font

    #생명주기 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
Designed by Tistory.