JPA

<Spring JPA> 1.6 플러시

DeveloperRio 2020. 4. 14. 09:46

플러시는 영속성 컨텍스트의 변경내용을 데이터베이스에 반영하는 것을 말한다.

 

쉽게 말하면 쿼리를 날린다.

 

플러시가 발생하는 경우는 더티체크를 통해 변경이 감지되거나, 다른 변경 요청을 받아서 1차캐시와 쓰기 지연 SQL 저장소에 등록되고 트랜잭션이 종료되는 경우에 쓰기 지연 SQL 저장소에 저장되어 있던 SQL 을 디비로 플러시 한다.

 

위의 경우가 일반적인 경우지만, 플러시가 일어나는 경우는 크게 세 가지로 나눌 수 있다.

첫번째는 직접 플러시 명령어를 하는 것이다. 아주 좋지 않아 보이지만... 기능이 있는 건 분명 사용처가 있을 터.

두번째는 트랜잭션 커밋이다. 위에서 말한 일반적인 경우를 뜻한다.

세번째는 JPQL 쿼리 실행한 경우이다. 

 

JPQL 쿼리가 조금 특이하다. 처음 든 생각은 아... JPA 쓰면 이런 이점이 있다고 주구장창 말하고 JPQL 도 장점이다 라고 말하더니 결국에는 JPQL 을 쓰면 앞에서 말한 장점을 사용할 수 없다고 말하는 꼴과 같은거 아닌가? 라는 생각이 들었다.

 

이 이유는 JPQL 은 테이블을 객체과 같이 쓰게 해주는 JPA 의 사상대로 쿼리를 작성할 수 있게 해주고, 이를 자기가 DB 에 날리는 쿼리로 잘 만들어서 날려주기 때문에, 1차 캐시와 쓰기 지연 SQL 저장소에 저장까지는 못한다. 이거까지는 너무 복잡해서 구현을 못했다 정도로 보인다.

 

플러시를 했다고 해서, 영속성 컨텍스트를 비우진 않는다. 

반응형