안녕하세요~ 잭코딩입니다!
이번에는 JPA 영속성 컨텍스트에 대해 글을 써보려고 합니다!
우캠 3주차에서 JPA 관련 미션을 수행하기 전에 학습한 내용을 정리해보려고 합니다
먼저 영속성 컨텍스트가 무엇인지 살펴볼까요?
영속성 컨텍스트(PersistenceContext) ?
"엔티티를 영구 저장하는 환경"이라는 뜻으로
영속성 컨텍스트는 JPA를 이해하는데 가장 중요한 용어입니다
PersistenceContext는 논리적인 개념으로 눈에 보이지 않고, EntityManager를 통해서 접근할 수 있습니다
엔티티의 생명주기
각 상태를 그림과 설명을 통해 살펴볼까요?
먼저 전체 엔티티의 생명주기는 아래와 같습니다
비영속, 영속, 준영속, 삭제 상태를 각각 코드와 그림을 통해 설명드리겠습니다
비영속 (new/transient)
영속성 컨텍스트와 전혀 관계가 없는 새로운 상태를 의미합니다
단순히 객체를 생성한 상태를 의미합니다
Station station = new Station("사당역");
station.setLine("four");
객체는 생성되었지만, 아직 EntityManager에서 관리되고 있지 않습니다
바로 이런 상태를 비영속 상태라고 합니다
영속 (managed)
Station station = new Station("사당역");
station.setLine("four");
EntityManager em = emf.createEntitiyManager();
em.getTransaction().begin();
// 이 시점부터 영속
em.persist(station);
em.persist()를 통해 객체를 저장하는 시점부터 영속성 컨텍스트에 관리되는 상태가 됩니다
즉, 영속 상태입니다
준영속 (detached)
영속성 컨텍스트에 저장되었다가 분리된 상태를 의미합니다
Station station = new Station("사당역");
station.setLine("four");
EntityManager em = emf.createEntitiyManager();
em.getTransaction().begin();
// 이 시점부터 영속
em.persist(station);
// 이 시점부터 준영속
em.detach(station);
준영속 상태의 객체는 더 이상 영속성 컨텍스트가 관리하지 않습니다
삭제 (removed)
삭제된 상태를 의미합니다
Station station = new Station("사당역");
station.setLine("four");
EntityManager em = emf.createEntitiyManager();
em.getTransaction().begin();
// 이 시점부터 영속
em.persist(station);
// 이 시점부터 삭제된 상태
em.remove(station);
영속성 컨텍스트의 이점
영속성 컨텍스트를 사용하면 무엇이 좋을까요?
1. 1차 캐시
2. 동일성(identity) 보장
3. 트랜잭션을 지원하는 쓰기 연산
4. 변경 감지(Dirty Checking)
다음 포스팅에서 코드와 그림을 통해 이점들을 설명하겠습니다
[JPA] 영속성 컨텍스트의 이점
안녕하세요~ 잭코딩입니다! 이번에는 JPA 영속성 컨텍스트의 이점 5가지에 대해 글을 써보려고 합니다! 지난 시간에는 영속성 컨텍스트가 무엇인지 살펴보았습니다 jackjeong.tistory.com/115 [JPA] 영속
jackjeong.tistory.com
'Spring > JPA' 카테고리의 다른 글
[JPA] 영속성 컨텍스트 이점 (0) | 2020.12.20 |
---|
댓글