본문 바로가기
프로그래밍/Back-end

JPA 영속성 Flush

by @GodWin 2024. 10. 15.

-

 

-
안녕하세요? 오늘은, 이전 포스팅에서 다뤘던, 영속성 컨텍스트의 이점 중에서, 1차캐시 중, 트랜잭션의 commit 시점에서, 내부적으로 이루어지는 flush에 대해서 알아보도록 하겠습니다.

※ JPA의 영속성과 영속성 컨텍스트/이점 등의 관련된 내용은, 아래 포스팅을 참조하시길 바라겠습니다.

https://logger-debug.tistory.com/entry/JPA-%EC%98%81%EC%86%8D%EC%84%B1%EA%B3%BC-%EC%98%81%EC%86%8D%EC%84%B1-%EC%BB%A8%ED%85%8D%EC%8A%A4%ED%8A%B8%EC%97%90-%EB%8C%80%ED%95%98%EC%97%AC

 

JPA 영속성과 영속성 컨텍스트에 대하여!

- -안녕하세요? 오늘은 JPA에서 가장 중요한 개념인, 영속성에 관련해서 알아보도록 하겠습니다.JPA를 공부할 때 가장 중요한 점은,1. 객체와 관계형 데이터베이스를 매핑하는 것(Object Relational Mapp

logger-debug.tistory.com

 

https://logger-debug.tistory.com/entry/JPA-%EC%98%81%EC%86%8D%EC%84%B1-%EC%BB%A8%ED%85%8D%EC%8A%A4%ED%8A%B8%EC%9D%98-%EC%9E%A5%EC%A0%90%EC%97%90-%EB%8C%80%ED%95%98%EC%97%AC

 

JPA 영속성 컨텍스트의 장점에 대하여!

- -안녕하세요? 오늘은, JPA에서 가장 중요한 개념인, 영속성에서 더 나아가서, 영속성 컨텍스트의 이점에 대해서 알아보도록 하겠습니다.※ JPA의 영속성과 영속성 컨텍스트에 대해서는, 아래 포

logger-debug.tistory.com

 

-

플러시 (Flush)


: 영속성 컨텍스트의 변경내용을 데이터베이스에 반영
-> 영속성 컨텍스트의 변경 사항들과 데이터베이스를 싱크하는 작업


플러시가 발생하게 되면,
: 변경 감지
: 수정된 엔티티 쓰기 지연 SQL 저장소에 등록
: 쓰기 지연 SQL 저장소의 쿼리를 데이터베이스에 전송 (등록/수정/삭제 쿼리)
등등이 수행 된다.

 1차캐시는 그대로 유지

-

호출 방법


직접호출 : flush()
자동 실행 : 트랜잭션 커밋 / JPQL 쿼리 실행

-
플러시 모드 옵션

EntityManagerFactory emf = Persistence.createEntityManagerFactory("유닛명");
EntityManager em = emf.createEntityManager();

em.setFlushMode(FlushModeType.COMMIT);

// 커밋이나 쿼리를 실행할 때 플러시(기본값)
FlushModeType.AUTO

// 커밋 할때만 플러시
FlushModeType.COMMIT

 

-

중요한 키포인트 !!


플러시의 특징은,

: 영속성 컨텍스트를 비우지 않음
: 영속성 컨텍스트의 변경내용을 데이터베이스에 동기화
: 플러시가 동작할 수 있는 이유는, 데이터베이스 트랜잭션이라는 작업 단위(개념)가 있기 때문

 JPA는 기본적으로 데이터를 맞추거나 동시성에 관련된 것들은 데이터베이스 트랜잭션에 위임

 


오늘은, 이전 포스팅에서 다뤘던, 영속성 컨텍스트의 이점 중에서, 1차캐시 중, 트랜잭션의 commit 시점에서, 내부적으로 이루어지는 flush에 대해서 알아보았습니다.
그럼 오늘도 즐거운 하루 되시길 바라겠습니다.