◆ 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();

 

정리

  • 영속성 컨텍스트를 비우지 않음
  • 영속성 컨텍스트의 변경 내용을 데이터베이스에 동기화
  • 트랜잭션이라는 작업 단위가 중요 -> 커밋 직전에만 동기화하면 됨.