
영속성 컨텍스트 기능
영속성 컨텍스트는 Entity 객체를 효율적으로 쉽게 관리하기 위해 만들어진 공간
-1차 캐시
-Entity 저장
em.persist(memo); 메서드가 호출되면 memo Entity 객체를 캐시 저장소에 저장
-Entity 조회
em.find() 호출 시, 캐시 저장소에 없다면 DB에 SELECT로 조회하여 캐시 저장소에 저장한 후 반환한다.em.find() 호출 시, 캐시 저장소에 식별자 값이 1이면서 Memo Entity 타입인 값이 있다면 해당 Entity 객체를 반환-1차 캐시 장점
-Entity 삭제
em.remove(entity); 삭제할 Entity를 조회한 후 캐시 저장소에 없다면 DB에 조회해서 저장em.remove(entity); 호출 시 삭제할 Entity를 DELETED 상태로 만든 후 트랜잭션 commit 후 Delete SQL이 DB에 요청된다.-쓰기 지연 저장소
-flush()
-변경감지 (Dirty Checking)
Entity의 상태
비영속(Transient)
-new 연산자를 통해 인스턴스화 된 Entity 객체를 의미
-아직 영속성 컨텍스트에 저장되지 않았기 때문에 JPA의 관리를 받지 않는다
영속(Managed)
-persist(entity) : 비영속 Entity를 EntityManager를 통해 영속성 컨텍스트에 저장하여 관리되고 있는 상태로 만든다.
준영속(Detached)
-영속성 컨텍스트에 저장되어 관리되다가 분리된 상태를 의미
-영속 상태에서 준영속 상태로 바꾸는 법
-> detach(entity) : 특정 Entity만 준영속 상태로 전환
->영속성 컨텍스트에서 관리되다(Managed)가 분리된 상태(Detached)로 전환됨
clear()
-영속성 컨텍스트를 완전히 초기화
-> 영속성 컨텍스트의 모든 Entity를 준영속 상태로 전환
close()
-영속성 컨텍스트를 종료
-> 영속성 컨텍스트가 종료되었기 때문에 계속해서 영속성 컨텍스트를 사용할 수 없다.
준영속 상태에서 다시 영속 상태로 바꾸는 법
-merge(entity)
-> 전달받은 Entity를 사용하여 새로운 영속 상태의 Entity를 반환
-> 비영속, 준영속 모두 파라미터로 받을 수 있으며 상황에 따라 ‘저장’을 할 수도 ‘수정’을 할 수도 있다.
삭제(Removed)
-remove(entity) : 삭제하기 위해 조회해온 영속 상태의 Entity를 파라미터로 전달받아 삭제 상태로 전환
📝오늘의 회고
화이팅!
오늘도! 쳐지지 말고 포기하지말고 힘내서 가보자고~~~