728x90
플러시란?
영속성 컨텍스트의 변경내용을 데이터베이스에 반영
영속성 컨텍스트의 쓰기 지연 SQL 저장소에 있던 SQL을 데이터베이스에 반영
데이터 베이스 트랜잭션이 commit
되면 자동적으로 flush()
가 발동한다.
그렇다면 flush()
가 발동하면 어떤 일이 일어날까?
- 변경감지
- 수정된 엔티티 쓰기 지연 SQL 저장소에 등록
- 쓰기 지연 SQL 저장소의 쿼릴르 데이터베이스에 전송(등록, 수정, 삭제 쿼리)
영속성 컨텍스트 플러시하는 방법
- em.flush() - 직접 호출(거의 사용할 일이 없다)
- 트랜잭션 커밋 - 플러시 자동 호출
- JPQL 쿼리 실행 - 플러시 자동 호출
em.flush()
em.persist()해도 DB에 쿼리가 날라가지 않는다 하지만 먼저 SQL을 보고싶은 경우에 사용 가능
Member member = new Member();
//영속성 컨텍스트가 관리 시작 INSERT SQL이 쓰기 지연 SQL 저장소에 등록
em.persist(member);
em.flush(); // 쓰기 지연 SQL 저장소에 있는 INSERT SQL을 DB에 날린다.
728x90