JPA

JPA flush()와 clear()

keepgoing 2021. 12. 27. 17:41

flush()와 clear()

JPA의 EntityManager는 persist, flush, clear 
세가지 동작이 있는데 각각,
persist(영속성 컨텍스트에 저장)
flush()(영속성 컨텍스트에서 데이터를 DB까지 접근 
시키지만 commit은 하지 않음)
clear()(영속성 컨텍스트 안을 모두 지움)
와 같은 기능을 한다. 

DB 쿼리 문을 확인하고 싶을 때

flush와 clear를 선언해줘야 하는데, 그 이유는
flush로 DB에 접근하고 clear를 시켜줌으로써 영속성 컨텍스트를 비운다.
영속성 컨텍스트가 비었으므로 JPA는 DB에서 정보를 가져올 수 밖에 없다.
이를 이용해서 DB에서 날라오는 쿼리문을 확인할 수 있게 되는 것이다.
JPA 특성상 바로 DB에 접근하지 않고 영속성 컨텍스트를
캐시로 만들고, 쓰기 지연 상태로 저장한 뒤 한번에 commit 하는데
이 과정이 DB에 직접 접근하지 않게 만든다. 따라서, 
flush와 clear를 선언해줘서 DB에 직접 접근하도록 설정하는것이다.