영속성 컨텍스트
애플리케이션과 데이터베이스 사이에서 객체를 보관하는 논리적 개념
EntityManager를 통해서 영속성 컨텍스트에 접근
영속성 컨텍스트 이점
영속성 컨텍스트는 내부에 캐시를 갖고 있고, (id, instance)의 맵 형태로 엔티티들이 저장된다.
이미지를 참고하자.
transaction.begin();
em.persist(memberA);
em.persist(memberB);
// ---- 1 ----
em.flush();
// ---- 2 ----
transaction.commit();
1의 영역에서 바로 INSERT QUERY를 DB에 바로 보낼 것 같다.
하지만 sql 쿼리를 바로 전송하거나 나중으로 지연 시킬 수 있다
memberA가 컨텍스트에 영속되면, 우선 1차 캐시로 저장되고 쿼리는 SQL 버퍼에 넣어진다.
memberB도 똑같이 1차 캐시로 저장되고 쿼리는 SQL 버퍼에 넣어진다.
이후, transaction을 commit 또는 컨텍스트에 버퍼를 비우도록 명령(flush)하면, 버퍼의 쿼리가 DB에 넘어간다.