방명록
- 엔티티 매니저와 엔티티 상태2025년 01월 27일 21시 42분 51초에 업로드 된 글입니다.작성자: 민발자728x90
- 영속성 컨텍스트
- 엔티티를 영구 저장하는 환경
- 1차 캐싱, 쓰기 지연, 변경 감지를 통해 영속 로직을 효율적으로 할 수 있게 해줌
- 효율적인 영속 로직 수행을 위해 엔티티는 영속성 컨텍스트에 관리되어야 함
- 엔티티 매니저
- 영속성 컨텍스트를 도와주는 것이 엔티티 매니저
- 엔티티의 상태를 변경하고 영속성 컨텍스트와 상호작용함으로써 영속 로직을 수행하는 역할을 가지고 있음
- 엔티티 상태
- 영속성 컨텍스트와 관련하여 4가지 상태를 가짐
- 비영속, 영속, 준영속, 삭제
- 엔티티 매니저는 persist, merge, remove, close 메서드를 이용하여 엔티티의 상태를 변경할 수 있음
- 엔티티 매니저는 영속성 컨텍스트의 1차 캐시로부터 엔티티를 조회할 수 있고 쓰기 지연 저장소에 있는 쿼리들을 flush하여 DB와 동기화 시킬 수 있음
- JPQL, Native Query를 이용하여 직접 DB로부터 데이터를 불러올 수도 있음
- 비영속 상태
- 엔티티 객체가 새로 생성되었지만 아직 영속성 컨텍스트와 연관되지 않은 상태
- 데이터베이스와 전혀 관련없으며 엔티티 객체는 메모리 상에만 존재
Member member = new Member("산초");
- 영속 상태
- 엔티티 객체가 영속성 컨텍스트에 관리되고 있는 상태
- 엔티티의 변경 사항이 자동으로 데이터베이스에 반영
em.persist(member); em.merge(detagedMember); em.find(Member.class, 1L);
- 준영속 상태
- 엔티티 객체가 한 번 영속성 컨텍스에 의해 관리되었지만 현재는 영속성 컨텍스트와 분리된 상태
- 엔티티 객체의 변경 사항이 더 이상 데이터베이스에 반영되지 않음
- 영속성 컨텍스트 종료, 트랜잭션 종료 등으로도 준영속 상태로 전환됨
em.detach(member); em.clear(); em.close();
- 삭제 상태
- 엔티티 객체가 영속성 컨텍스트에서 제거된 상태
- 엔티티 객체가 데이터베이스에서 삭제됨
em.remove(member);
728x90'데브코스 > TIL' 카테고리의 다른 글
JPA의 ddl 옵션 (0) 2025.01.24 스프링 부트 매개변수 이름 인식 (0) 2024.12.17 다음글이 없습니다.이전글이 없습니다.댓글 - 영속성 컨텍스트