이번엔 플러시와 준영속 상태에 대해서 알아보자
commit은 많이 들어봤는데 flush는 뭘까?
flush는 영속성 컨텍스트의 변경내용을 데이터베이스에 반영하는 행위이다.
실제로 flush가 일어나는 경우는 다음과 같다.
커밋과 비슷한 역할을 하는 거 같지만, 트랜잭션은 여전히 유지되며, SQL이 실행되더라도 커밋되지 않은 상태로 남는다. 또한 트랜잭션 내에서 영구 저장 아니다.
commit 시에 자동으로 flush가 일어나기 때문에 비슷한 동작 같지만 실제로는 다르다.
FlushModeType.AUTO : 커밋이나 쿼리를 실행할 때 플러시FlushModeType.COMMIT : 커밋할 때만 플러시다시 영속 상태에 대해서 복기해보면

entityManager을 통해서 JPA로 관리할 수 있는 상태(1차 캐시에 올라가 있는 상태) 라고 할 수 있다.
em.detach(entity) : 특정 엔티티만 준영속 상태로 전환em.clear() : 영속성 컨텍스트를 완전히 초기화em.close() : 영속성 컨텍스트를 종료