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