노트코드
노트코드
노트코드

블로그 메뉴

  • 홈
  • 이력서
  • 이전 블로그
  • 글쓰기
  • 관리자페이지
  • 분류 전체보기 (57)
    • 코틀린 (2)
      • 실무 프로젝트로 배우는 Kotlin & Sprin.. (2)
    • JAVA (1)
      • 디자인패턴 (1)
      • 객체지향 5대원칙 (0)
    • SPRING (32)
      • JPA (11)
      • 스프링시큐리티 (1)
      • 스프링 (8)
      • QueryDsl (1)
      • 스프링배치 (11)
    • AZURE (0)
    • ETC (10)
      • MAVEN (0)
      • GIT (0)
      • ReMind (3)
      • Exception (1)
      • CS (6)
    • 책 (8)
      • 이것이 자바다 (8)

최근 글

최근 댓글

태그

  • JPA
  • 스프링
전체 방문자
오늘
어제
hELLO · Designed By 정상우.
노트코드

노트코드

ETC/ReMind

[JPA] 엔티티의 생명주기

2022. 2. 8. 01:09

엔티티에는 4개의 상태가 존재한다

  • 비영속(new/transient): 영속성 컨텍스트와 전혀 관계가 없는 상태
  • 영속(managed): 영속성 컨텍스트에 저장된 상태
  • 준영속(detached): 영속성 컨텍스트에 저장되었다가 분리된 상태
  • 삭제(removed) : 삭제된 상태

(너무 유명한 이미지) 이미지 출처 : https://thorben-janssen.com/entity-lifecycle-model/

 

비영속

- 엔티티 객체를 생성한 직후 아무것도 안한 상태로 순수한 상태(저장하기 전 상태)

 

영속

- 엔티티 매니저를 통해 엔티티 영속성 컨텍스트에 저장한 상태 , 즉 영속성 컨텍스트에 의해 관리된다는 뜻\

- em.persist()

 

준영속

- 영속성 컨텍스트가 관리하던 영속 상태의 엔티티를 영속성 컨텍스트가 관리하지 않는 상태, 

- 영속성 컨텍스트가 관리하지 않으려면 em.detach()를 호출하면 됨, 또는 em.close(), em.clear()도 동일함

준영속 상태의 특징
1. 영속성 컨텍스트가 관리하지 않으므로 1차 캐시, 쓰기 지연, 변경감지, 지연로딩을 포함한 영속성 컨텍스트가 
   제공하는 어떠한 기능도 동작하지 않는다.
2. 식별자 값이 없을 수도 있지만 준영속 상태는 이미 한번 영속 상태였으므로 반드시 식별자 값을 가지고 있다.
3. 지연 로딩은 실제 객체 대신 프록시 객체를 로딩해두고 해당 객체를 실제 사용할 때 영속성 컨텍스트를 통해
   데이터를 불러오는 방법이다. 하지만 준영속 상태는 영속성 컨텍스트가 더이상 관리않하므로 지연 로딩시
   문제가 발생한다. 

 

삭제

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

- em.remove()

'ETC > ReMind' 카테고리의 다른 글

[GC] GC  (0) 2022.02.14
[JPA] 영속성 컨텍스트  (0) 2022.02.08
    'ETC/ReMind' 카테고리의 다른 글
    • [GC] GC
    • [JPA] 영속성 컨텍스트
    노트코드
    노트코드
    노션 블로그에서 티스토리로 이전공사중

    티스토리툴바