Backend/Spring Boot
[자바 ORM 표준 JPA 프로그래밍] 3장
lim.dev
2023. 4. 11. 22:55
3장에서는 엔티티 매핑에 대한 내용을 다루고 있습니다.
엔티티 매핑: 객체와 관계형 데이터베이스의 테이블을 매핑하는 것을 의미합니다. 이를 통해 객체를 데이터베이스에 저장하고 조회할 수 있습니다.
영속성 컨텍스트: 엔티티를 영구 저장하는 환경입니다. 엔티티 매니저로 엔티티를 저장하거나 조회하면 엔티티 매니저는 영속성 컨텍스트에 엔티티를 보관하고 관리합니다.
엔티티의 생명주기
- 비영속: 영속성 컨텍스트와 전혀 관계가 없는 상태 (저장을 안 한 상태)
- 영속: 영속성 컨텍스트에 저장된 상태 (저장한 상태 //em.persist())
- 준영속: 영속성 컨텍스트에 저장되었다가 분리된 상태 (//em.detach(), em.clear(), em.close())
- 삭제: 삭제된 상태 (//em.remove())

영속성 컨텍스트의 특징
- 영속성 컨텍스트는 엔티티를 식별자 값 (@Id)으로 구분하기 때문에 영속 상태는 식별자 값이 반드시 있어야 한다.
- JPA는 트랜잭션을 커밋하는 순간 영속성 컨텍스트에 새로 저장된 엔티티를 DB에 반영하는데 이를 flush 라고 한다.
영속성 컨텍스트의 장점
- 1차 캐시
- 동일성 보장
- 트랜잭션을 지원하는 쓰기 지연
- 변경 감지
- 지연 로딩
플러시 flush(): 영속성 컨텍스트의 변경 내용을 데이터베이스에 반영한다.
영속성 컨텍스트를 플러시하는 방법
- em.flush() 직접 호출
- 트랜잭션 커밋 시 플러시 자동 호출
- JPQL 쿼리 실행 시 플러시 자동 호출
플러시 모드 옵션 2가지
- FlushModeType.AUTO: 커밋이나 쿼리를 실행할 때 플러시 (기본 값)
- FlushModeType.COMMIT: 커밋할 때만 플러시 -> 성능 최적화를 위해 사용
요약
- 엔티티 매니저는 엔티티 매니저 팩토리에서 생성한다.
- 영속성 컨텍스트는 엔티티 매니저를 만들면 함께 만들어지는데, 엔티티 매니저를 통해서 접근할 수 있다.
- 영속성 컨텍스트에 저장한 엔티티는 플러시 시점에 데이터베이스에 반영된다.
- 준영속 상태의 엔티티는 영속성 컨텍스트의 관리를 받지 못한다.