매일 한줄 코딩

[JPA] 플러시 본문

develop/JPA(ORM)

[JPA] 플러시

ShipJH 2022. 12. 22. 15:46

3. 플러시

플러시란 ?

영속성 컨텍스트의 변경내용을 데이터베이스에 반영하는 것

플러시 발생하면?

  • 변경 감지
  • 수정된 엔티티 쓰기 지연 SQL 저장소에 등록
  • 쓰기 지연 SQL 저장소의 쿼리를 데이터베이스에 전송 (등록, 수정, 삭제 쿼리)

영속성 컨텍스트를 플러시하는 방법

  • em.flush()
    • 플러쉬를 하더라도, 1차캐시는 없어지지 않음, 쓰기지연 SQL 저장소에 등록된 쿼리를 데이터베이스에 반영하는 과정일 뿐.
  • 트랜젝션 커밋 ( 플러시 자동 호출)
  • JPQL 쿼리 실행 ( 플러시 자동 호출 )
      em.persist(memberA);
      em.persist(memberB);
      em.persist(memberC);
    
      query = em.createQuery("select m from Member m", Member.class); 
      // 이때에 플러시가 호출된다. (memberA~C 까지 저장됨)
      // 플러시가 자동호출 되지 않으면, 위의 memberA~C까지의 데이터를 조회 할 수 없게 되기 때문.
      List<Member> members = query.getResultList();
  • JPQL 쿼리 실행시 플러시가 자동으로 호출되는 이유

플러시 모드 옵션

그냥 오토로 써라~

정리 (중요)

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

'develop > JPA(ORM)' 카테고리의 다른 글

[JPA] 엔티티 매핑  (0) 2022.12.22
[JPA] 준영속 상태  (0) 2022.12.22
[JPA]영속성 컨텍스트  (0) 2022.12.22
Comments