entityManager.persist(member)
persist 값에 저장할 객체를 넣게 되면 영속상태가 되는데 이는 영속성 콘텍스트 내에 1차 캐시에 저장시킨다. (DB 아님)
em.detach(member)
캐시 내에서 해당 객체를 제거한다. (DB에서 삭제 하는 것이 아님)
entityManager.persist(member);
entityManager.persist(member2);
위와 같이 실행했을 때 쿼리문은 한 번만 실행된다.
변경 감지
영속성 컨텍스트 내의 1차 캐시 안에 있는 값이 변경되었다면 알아서 update 쿼리를 실행한다.
flush
쿼리문이 실행되는 명령어로 컨텍스트 내 1차 캐시의 내용을 DB 와 동기화시킨다.
보통 commit 시 또는 JPQL 쿼리 실행 시 바로 실행된다.
해당 명령어가 호출 되더라도 캐시가 비워지지 않는다.