◆ ORM/JPA - 기초
[JPA] - 플러시
쿠키린
2024. 7. 29. 17:47
flush
영속성 컨텍스트의 변경내용을 데이터베이스에 반영
flush(플러시 발생)
- 변경 감지
- 수정된 엔티티 '쓰기 지연 SQL 저장소'에 등록
- 쓰기 지연 SQL 저장소의 쿼리를 DB에 전송(등록/수정/삭제 쿼리)
영속성 컨텍스트를 플러시하는 방법
- em.flush() - 직접 호출
- 트랜잭션 커밋 - 플러시 자동 호출
- JPQL 쿼리 실행 - 플러시 자동 호출
//저장
Team team = new Team();
team.setName("TeamA");
em.persist(team);
//비영속성
Member member = new Member();
member.setUsername("member1");
member.setTeam(team); //(중요) jpa가 알아서 Team에서 pk를 꺼내서 fk 값에 인서트할때 사용
//영속성
em.persist(member);
/**
* ⭐플러시(FLUSH)
* 순서1) INSERT 쿼리가 작성 됨.
* 순서2) 데이터베이스 트랜직션이 커밋 됨.
*
* 쓰기 지연 SQL 저장소에 있던 영속성 컨텍스트 데이터가 db에 반영된다.
* */
em.flush();
정리
- 영속성 컨텍스트를 비우지 않음
- 영속성 컨텍스트의 변경 내용을 데이터베이스에 동기화
- 트랜잭션이라는 작업 단위가 중요 -> 커밋 직전에만 동기화하면 됨.