
JPA에서 가장 중요한 2가지는 객체와 관계형 DB 매핑하기, 영속성컨텍스트이다.
영속성 컨텍스트: "엔티티를 영구 저장하는 환경"이라는 뜻
EntityManager.persist(entity) -->DB에 저장하는게 아닌 엔티티는 영속성 컨텍스트에 저장
영속성 컨텍스트는 논리적인 개념으로 엔티티 매니저를 통해서 영속성컨텍스트에 접근한다.
->영속 상태가 된다고 DB에 쿼리가 날라가는게 아님. 트랜잭션 커밋하는 시점에 DB에 쿼리가 날라감.






->최초로 영속성컨텍스트로 들어왔을 떄 스냅샷을 찍고, 그 스냅샷과 비교하여 바뀌었으면 update쿼리를 만들어서 쓰기 지연 sql저장소에 만들어두다가 커밋될떄 들어가 반영됨.
영속성 컨텍스트의 변경 내용을 데이터베이스에 반영
플러시 발생-> 변경 감지, 수정된 엔티티 쓰기 지연 sql 저장소에 등록, 쓰기 지연 sql 저장소의 쿼리를 데이터베이스에 전송
영속성 컨텍스트를 플러시 하는 방법
em.flush() - 직접 호출
트랜잭션 커밋 - 플러시 자동 호출
JPQL 쿼리 실행 - 플러시 자동 호출
!!플러시는 영속성 컨텍스트를 비우지 않고,영속성 컨텍스트의 변경 내용을 데이터베이스에 동기화한다. 트랜잭션이라는 작업 단위가 중요 -> 커밋 직전에만 동기화하면 됨.