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 |
댓글