이 포스트는 인프런 김영한님의 '자바 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()
를 호출하면 됨.