본문 바로가기
Spring/JPA

영속성 컨텍스트 - 변경 감지

by YoonJong 2022. 9. 20.
728x90

영속성 컨텍스트에서의 변경감지에서 가장 핵심은 update 를 할 때, 

em.persist 로 다시 영속화 할 필요가 없다는 것이다.

 

변경감지란 무엇일까?

 

변경감지는 스냅샷 이라는 1차캐시에서 비롯된다.

1차 캐시에서는 그때그때마다 스냅샷을 찍어 캐시의 상태를 사진으로 찍어놓는다.

이 후, 데이터가 변경되면 스냅샷과 비교하여 변경된 것을 감지하고 update 쿼리를 DB에 날리게 된다.

( 틀린그림 찾기라고 생각하면 쉽다 )

 


예제

ID 가 1(PK) 이고, NAME 이 memberA 인 데이터를 memberA에서변경으로 변경하려고 한다.

 

tx.begin(); // 트랜잭션 시작

Member findMember = em.find(Member.class, 1L);
findMember.setName("memberA에서 변경");

tx.commit();

해당 코드만 작성하면 자동으로 변경된다.

아래와 같은 쿼리가 작성되는데, em.find 를 실행해 select 쿼리가 발생한다.

setName 을 하면 자동으로 update 쿼리가 실행되는 것을 볼 수 있다.

728x90

'Spring > JPA' 카테고리의 다른 글

객체와 테이블 매핑  (0) 2022.09.20
영속성 컨텍스트 - 플러시  (0) 2022.09.20
영속성 컨텍스트 - 쓰기 지연  (0) 2022.09.20
영속성 컨텍스트 - 동일성보장  (0) 2022.09.20
영속성 컨텍스트 - 1차 캐시  (0) 2022.09.20

댓글