7) 영속성 컨텍스트 1차 캐시
Entity 저장 시

Entity 조회 시
1차 캐시에 조회하는 Id 가 존재하는 경우

1차 캐시에 조회하는 Id 가 존재하지 않은 경우


**'1차 캐시'** 사용의 장점
1. DB 조회 횟수를 줄임
2. **'1차 캐시'**를 사용해 DB row 1개 당 객체 1개가 사용되는 것을 보장 (객체 동일성 보장)
8) Entity 삭제


9) Entity 업데이트 실패
Entity 객체를 수정해도 DB 에는 update 가 되지 않음


1차 캐시 Entity 객체에만 업데이트 반영됨
User DB 에는 반영되지 않음
10) Entity 업데이트 방법 (1)
userRepository.save() 사용


[UserService] Entity 업데이트 방법 (1)
public User updateUser1() {
// 테스트 회원 "user1" 생성
User user = new User("user1", "RM", "고기");
// 회원 "user1" 객체를 영속화
User savedUser1 = userRepository.save(user);
// 회원의 nickname 변경
savedUser1.setNickname("남준이");
// 회원의 favoriteFood 변경
savedUser1.setFavoriteFood("육회");
// user1 을 저장
User savedUser2 = userRepository.save(savedUser1);
assert(savedUser1 == savedUser2);
return savedUser2;
}
11) Entity 업데이트 방법 (2)
@Transactional 을 추가
굳이 userRepository.save() 함수를 호출하지 않아도, 함수가 끝나는 시점에 변경된 부분을 알아서 업데이트 해 줌 (이를 "Dirty check" 라고 함)
간단히 함수가 종료되는 시점에 각 Entity 에 save() 가 호출된다라고 이해
💡 정확한 이해 위해 필요한 추가학습 내용
: 쓰기 지연 SQL 저장소, flush, commit 등
[UserService] Entity 업데이트 방법 (2)
@Transactional
public User updateUser2() {
// 테스트 회원 "user1" 생성
// 회원 "user1" 객체 추가
User user = new User("user1", "진", "꽃등심");
// 회원 "user1" 객체를 영속화
User savedUser = userRepository.save(user);
// 회원의 nickname 변경
savedUser.setNickname("월드와이드핸섬 진");
// 회원의 favoriteFood 변경
savedUser.setFavoriteFood("까르보나라");
return savedUser;
}