엔티티에는 4개의 상태가 존재한다
- 비영속(new/transient): 영속성 컨텍스트와 전혀 관계가 없는 상태
- 영속(managed): 영속성 컨텍스트에 저장된 상태
- 준영속(detached): 영속성 컨텍스트에 저장되었다가 분리된 상태
- 삭제(removed) : 삭제된 상태
비영속
- 엔티티 객체를 생성한 직후 아무것도 안한 상태로 순수한 상태(저장하기 전 상태)
영속
- 엔티티 매니저를 통해 엔티티 영속성 컨텍스트에 저장한 상태 , 즉 영속성 컨텍스트에 의해 관리된다는 뜻\
- 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 |