인프런 커뮤니티 질문&답변

dev-ujin님의 프로필 이미지
dev-ujin

작성한 질문수

자바 ORM 표준 JPA 프로그래밍 - 기본편

영속성 컨텍스트 2

변경 감지에 대해서 질문이 있습니다.

작성

·

294

2

안녕하세요! 소중한 강의 너무 감사드립니다!

변경 감지에 대해 질문이 있어서 글 올립니다!

값 변경 전에는 id는 1, name은 HelloJPA 였습니다.

강의에서 제가 이해한 내용은 'commit을 하면 내부적으로 flush가 동작하는데 이 때 1차 캐시 안에 엔티티와 스냅샷 상태를 비교해서 쓰기 지연 저장소에 UPDATE 쿼리를 날려주고 DB에 commit이 된다' 인데, 제가 올바르게 이해한건가요?

어느 시점에 1차캐시에 값이 바뀌고 어느 시점에 DB에 값이 바뀌는지 잘 모르겠어서 테스트 해보기 위해서 아래 코드를 작성하였는데요(tx.commit(); 전후로 name을 조회해봤습니다.)

Member findMember = em.find(Member.class, 1L);
findMember.setName("HelloJPA2");
System.out.println("first : " + findMember.getName()); //HelloJPA
tx.commit();
System.out.println("second : " + findMember.getName()); //HelloJPA2

제가 생각했을 떄는 first: HelloJPA / second: HelloJPA2 가 출력되어야 할 것 같은데 둘다 HelloJPA2가 출력되었습니다... 제가 어느 부분을 잘못 이해하고 있는지 알려주실 수 있나요?

답변 1

1

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 유진님

자바의 객체는 값을 설정하는 순간 변경이 됩니다.

차이는 데이터베이스에 반영이 되는가 안되는가 입니다.

tx.commit()을 하기 전에는 데이터베이스에 변경사항이 반영되지 않습니다.

tx.commit() 이후에는 데이터베이스에 변경 사항이 반영됩니다.

감사합니다^^

dev-ujin님의 프로필 이미지
dev-ujin

작성한 질문수

질문하기