- 영속성 컨텍스트 = JPA가 관리하는 Entity 캐시 (메모리)
@Transactional
fun updateCampaign(id: Long, newTitle: String) {
// 1. DB에서 가져옴 → 영속성 컨텍스트에 저장됨
val campaign = repository.findById(id).get()
// 2. 값 변경 (save() 안 불러도 됨)
campaign.title = newTitle
// 3. @Transactional 끝날 때 JPA가 자동으로 변경 감지 → UPDATE 쿼리 실행
}
- save를 호출하지 않아도 되는 이유는..dirty Checking (변경 감지) 때문
- findById()하면 JPA가 Entity를 메모리에 올림 (영속 상태)
- 이 Entity의 원본 스냅샷도 저장해둠.
@Transactional이 끝날 때 현재 Entity와 스냅샷을 비교함.
- 달라진게 있으면 자동으로 UPDATE 쿼리 날림
- 새로운 엔티티를 생성하는 경우에는, save가 필요함.