개요
- EntityManagerFactory : EntityManager를 만드는 공장. 애플리케이션에서 persistens.xml의 persistens-unit갯수 만큼만 있어야함
- EntityManager : 요청이 올때마다 생성 해도 됨.(커넥션풀에서 커넥션 한개씩 이라고 생각해도 될듯)
- persistence context(영속성 컨텍스트) : ‘엔티티를 영구 저장하는 환경’
특징
- 영속 상태인 엔티티는 식별자 값이 반드시 있어야 한다. (식별자 값이없으면 예외 발생)
트랜잭션 커밋 하는 순간 DB 반영힘 이를 플러시(flush)라 함
장점
1차 캐시 : 영속성 컨텍스트에서 맵형태로 id(식별자)와 엔티티를 관리
- 동일성 : 1차 캐시에 있는 같은 엔티티를 반환 함으로 동일성 보장(==)
- 트랜잭션을 지원 하는 쓰기 지연 : 커밋 전까지 inser,update,delete문을 쓰기 지연 SQL 저장소에 담아두고 한번에 내보낸다.
- 변경 감지 : 최초 상태를 복사(스냅샷) 해두는데 이를 비교하여 변경을 감지함 변경이 감지되면 해당 엔티티로 update 문을 DB에 보냄
- 지연 로딩 : 연관관계로 매핑된 엔티티의 경우 조회할때 데이터를 가져옴
엔티티 생명주기
- 비영속(new/transient) : 영속성 컨텍스트와 전혀 관계가 없는 상태
- 영속(managed) : 영속성 컨텍스트에 저장된 상태
- 준영속(detached) : 영속성 컨텍스트에 저장되었다가 분리된 상태
- 삭제(removed) : 삭제된 상태
영속성 관리 정리
- 엔티티 매니저는 엔티티 매니저 팩토리에서 생성한다. 자바를 직접 다루는 J2SE환경에서는 엔티티 매니저를 만들면 그 내부에 영속성 컨텍스트도 함께 만들어진다. 이 영속성 컨텍스트는 엔티티 매니저를 통해서 접근할 수 있다.
- 영속성 컨텍스트는 애플리케이션과 데이터베이스 사이에서 객체를 보관하는 가상의 데이터베이스 같은 역할을 한다. 영속성 컨텍스트 덕분에 1차 캐시, 동일성 보장, 트랜잭션을 지원하는 쓰기 지연, 변경 감지, 지연로딩 기능을 사용할 수 있다.
- 영속성 컨텍스트에 저장한 엔티티는 플러시 시점에 데이터베이스에 반영되는데 일반적으로 트랜잭션을 커밋할 때 영속성 컨텍스트가 플러시 된다.
- 영속성 컨텍스트가 관리하는 엔티티를 영속 상태의 엔티티라 하는데, 영속성 컨텍스트가 해당 엔티티를 더 이상 관리하지 못하면 그 엔티티는 준영속 상태의 엔티티라 한다. 준영속 상태의 엔티티는 더는 영속성 컨텍스트가 제공하는 1차 캐시, 동일성 보장 트랜잭션을 지원하는 쓰기 지연, 변경감지, 지연 로딩 같은 기능들을 사용할 수 없다.
출처 : 자바 ORM 표준 JPA 프로그래밍 (김영한)