
was 는 하나의 EntityManagerFactory 를 가지고 여러개의 EntityManager 를 만든다.jpa 에서 데이터베이스와 관련된 모든 작업은 Transaction 단위 내에서 수행한다.
EntityManger 를 생성하면 자연스럽게 이와 매핑되는 하나의 PersistenceContext 라는 공간이 생긴다고 생각하면 된다.EntityManger를 통해서 PersistenceContext 에 접근하는 것이다.
jpa 에서 관리하는 객체를 디비에 저장하려는 시도를 하면 엔티티 메니저는 해당 객체를 영속성 컨텍스트인 1차 캐시에 저장한다.
그리고 영속성 컨텍스트에 있는 내용이 변경이 되었을 때는 다음과 같이 동작한다. jpa 가 flush 하기 이전에 1차캐시에 들어왔을때 초기의 객체 상태를 담고 있는 스냅샷과 Entity를 비교하여, 변경이 생겼을 때 Update query를 생성해서 디비에 반영되게 한다.
참고로 플러시는 트랜잭션이 커밋하거나 jpql 쿼리가 실행되는 시점에서 자동 호출된다.