이 포스트는 인프런 김영한님의 '자바 ORM 표준 JPA 프로그래밍 - 기본편'의 내용을 정리한 포스트 입니다.
persist로 영속화하면 1차 캐시라는 곳에 저장이 된다. 이때 같은 엔티티를 조회하면 db에서 찾는 것이 아니라 1차 캐시에 저장되어 있는 엔티티를 조회한다. 만약 find를 통해서 찾는 엔티티가 1차 캐시에 존재하지 않으면 db에서 조회 후 1차 캐시에 저장한다.persist해서 저장하는 과정에서 persist를 호출하는 순간에 db에 저장되는 것이 아니고 쓰기 지연 SQL 저장소에 INSERT쿼리가 저장되고 트랜젝션이 commit되는 순간 db에 쿼리를 날려서 INSERT쿼리가 실행된다.flush가 호출되는 순간 스냅샷과 현재의 엔티티를 비교해서 변경 사항이 있다면(변경감지) 그때 UPDATE쿼리를 db에 날린다.flush란 영속성 컨텍스트의 변경사항을 데이터베이스에 반영하는 것이다. flush는 다음과 같은 경우에 호출된다.em.flush()transaction.commit() -> 플러시 자동 호출flush는 영속성 컨텍스트를 비우는 것은 아니다. 영속성 컨텍스트의 변경사항을 데이터베이스와 동기화하는 과정이고 영속성컨텍스트르 비우고 싶으면 em.clear()를 호출하면 됨.