플러시 flush

송수용·2022년 6월 12일
0

플러시

  • 영속성 컨텍스트의 변경 내용을 데이터베이스에 반영
  1. 변경감지
  2. 쓰기 지연 SQL 저장소의 쿼리를 데이터베이스에 전송한다. (등록, 수정, 삭제 쿼리).
  • 영속성 컨텍스트를 플러시하는 방법은 3가지이다.
  1. em.flush()를 직접 호출한다.(test할 때는 사용됨.)
  2. 트랜잭션 커밋 시 플러시가 자동 호출된다.
    데이터베이스에 변경 내용을 SQL로 전달하지 않고 트랜잭션만 커밋하면 어떤 데이터도 데이터 베이스에 반영되지 않는다.
    따라서 트랜잭션을 커밋하기 전에 꼭 플러시를 호출해서 영속성 컨테긋트의 변경 내용을 데이터베이스에 반영해야 한다. JPA는 이런 문제를 예방하기 위해 트랜잭션을 커밋할 때 플러시를 자동으로 호출한다.
  3. JPQL 쿼리 시 플러시가 자동 호출된다.
em.persist(memberA);
em.persist(memberB);
em.persist(memberC);
//중간에 JPQL 실행
query = em.createQuery("select m from Member m", Member.class);
List<Member> members= query.getResultList();
  • 왜 JPQL 쿼리를 실행할 때 플러시가 자동 호출될까?
    쿼리를 실행하기 직전에 영속성 컨텍스트를 플러시해서 변경 내용을 데이터베이스에 반영해야 한다. JPA는 이런 문제를 예방하기 위해 JPQL을 실행할 때도 플러시를 자동 호출한다.

    정리

  • 영속성 컨텍스트를 비우지 않음
  • 영속성 컨텍스트의 변경 내용을 데이터베이스에 동기화
  • 트랜잭션이라는 작업 단위가 중요 ->커밋 직전에만 동기화하면 됨.
profile
#공부중 #협업 #소통중시 #백엔드개발자 #능동적 #워커홀릭 #스파르타코딩 #항해99 #미니튜터 #Nudge #ENTJ #브레인스토밍 #아이디어뱅크

0개의 댓글