공hannah부
자바 ORM 표준 JPA 프로그래밍 CH03 (영속성 관리) 본문
엔티티 매니저 팩토리와 엔티티 매니저
- 엔티티 매니저: 엔티티를 저장, 수정, 삭제, 조회하는 등 엔티티와 관련된 모든 일을 처리
- 엔티티를 저장하는 가상의 데이터 베이스
- 엔티티 매니저 팩토리: 엔티티 매니저를 만드는 공장
- 공장을 만드는 비용은 상당히 큼 → 한개만 만들어 애플리케이션 전체에서 공유하도록 설계
- 공장에서 엔티티 매니저를 생성하는 비용은 거의 들지 않음
영속성 컨텍스트
- 영속성 컨텍스트: 엔티티를 영구 저장하는 환경
- 엔티티 매니저로 엔티티를 저장하거나 조회하면 엔티티 매니저는 영속성 컨텍스트에 엔티티를 보관하고 관리함
- em.persist(member); → 여기서 persist() 메소드는 엔티티 매니저를 사용해 회원 엔티티를 영속성 컨텍스트에 저장
엔티티의 생명주기
- 엔티티의 4가지 상태
- 비영속: 영속성 컨텍스트와 전혀 관계가 없는 상태
- 영속: 영속성 컨텍스트에 저장된 상태
- 준영속: 영속성 컨텍스트에 저장되었다가 분리된 상태
- 삭제: 삭제된 상태
영속성 컨텍스트의 특징
- 특징
- 영속성 컨텍스트와 식별자 값: 영속성 컨텍스트는 식별자 값으로 구분 → 영속 상태는 식별자 값이 반드시 있어야 한다.
- 영속성 컨텍스트와 데이터 베이스 저장
- 영속성 컨텍스트가 엔티티를 관리할 때의 장점: 1차 캐시, 동일성 보장, 트랜잭션을 지원하는 쓰기 지연, 변경 감지, 지연 로딩 등
- 엔티티 조회
- 1차 캐시: 영속성 컨텍스트가 내부에 가지고 있는 캐시
- 1차 캐시의 키는 식별자 값
- 1차 캐시에서 조회: em.find()를 호출하면 1차 캐시에서 식별자 값으로 엔티티를 찾음. 만약 찾는 엔티티가 있으면 데이터베이스 조회X, 메모리에 있는 1차 캐시에서 조회
- 데이터 베이스에서 조회: 엔티티가 1차 캐시에 없으면 엔티티 매니저는 데이터 베이스를 조회해 엔티티 생성
- 영속 엔티티의 동일성 보장
- 엔티티 등록
- 엔티티 매니저는 트랜잭션을 커밋하기 직전까지 엔티티를 내부 쿼리 저장소에 모아 둠
- 트랜잭션을 커밋할 때 모아둔 쿼리를 데이터베이스에 보냄 → 쓰기 지연
- 플러시: 영속성 컨텍스트의 변경 내용을 데이터 베이스에 동기화하는 작업
- 엔티티 수정
- 변경감지: 엔티티의 변경 사항을 데이터베이스에 자동으로 반영하는 기능. 이는 영속성 컨텍스트가 관리하는 영속 상태의 엔티티에만 적용된다.
- 엔티티 삭제
- 삭제 대상 엔티티 조회 후 삭제
- ex) Member memberA = em.find(Member.class, "memberA"); em.remove(memberA);
- 플러시
- 플러시: 영속성 컨텍스트의 변경 내용을 데이터베이스에 반영
- 플러시 실행시
- 변경 감지가 동작해서 영속성 컨텍스트에 있는 모든 엔티티를 스냅샷과 비교해 수정된 엔티티를 찾음
- 수정된 엔티티는 수정 쿼리를 만들어 쓰기지연 SQL 저장소에 등록
- 쓰기 지연 SQL 저장소의 쿼리를 데이터베이스에 전송
- 플러시 하는 방법
- em.flush() 직접 호출
- 트랜잭션 커밋 시 자동 호출 됨
- JPQL 쿼리 실행 시 자동 호출 됨
- 플러시 모드 옵션
- FlushModeType.AUTO : 커밋이나 쿼리를 실행할 때 플러시(기본값)
- FlushModeType.COMMIT : 커밋할 때만 플러시
- 준영속
- 준영속 상태의 엔티티는 영속성 컨텍스트가 제공하는 기능을 사용할 수 X
- 영속 상태의 엔티티를 준영속 상태로 만드는 방법
- em.detach(entity): 특정 엔티티만 준영속 상태로 전환
- em.clear(): 영속성 컨텍스트를 완전히 초기화
- em.close(): 영속성 컨텍스트 종료
- 준영속 상태의 특징
- 거의 비영속 상태와 가깝다
- 식별자 값을 가지고 있다
- 지연로딩을 할 수 없다
자바 ORM 표준 JPA 프로그래밍 : 네이버 도서
네이버 도서 상세정보를 제공합니다.
search.shopping.naver.com
'공부 > 백엔드' 카테고리의 다른 글
자바 ORM 표준 JPA 프로그래밍 CH05 (연관관계 매핑 기초) (0) | 2023.06.26 |
---|---|
자바 ORM 표준 JPA 프로그래밍 CH04 (엔티티 매핑) (0) | 2023.06.26 |
CI & CD (0) | 2023.06.02 |
자바 ORM 표준 JPA 프로그래밍 CH02 (0) | 2023.05.22 |
EC2 서버에 프로젝트 배포하기 (0) | 2023.05.05 |