개발천재

[Spring Boot] JPA에서 save()가 update 역할을 하는 이유 본문

개발 준비/Spring Boot

[Spring Boot] JPA에서 save()가 update 역할을 하는 이유

세리블리 2025. 2. 18. 23:31
반응형

JPA에서 update가 없을까?

JPA는 영속성 관리(Persistence Context)를 통해 객체 상태를 추적하고 있기 때문에, 엔티티 객체가 변경되면 자동으로 갱신(update)이 이뤄진다. JPA에서는 update라는 메서드가 존재하지 않는다.
JPA에서 데이터를 업데이트 하기 위해서는 save()를 사용한다. save() 메서드는 새로운 객체는 저장하고, 기존 객체는 수정하는 방식으로 동작한다. 즉, save는 insert와 update를 구분 없이 처리하는 메서드이다.

*영속성 관리(Persistence Context)란?
영속성 관리(Persistence Context)는 JPA가 관리하는 메모리 공간으로, 객체의 상태를 추적하고 변경 사항을 자동으로 데이터베이스에 반영하는 역할을 해요.

 

 



기본 동작 방식

새로운 엔티티 저장 (insert)

Member member = new Member();
member.setName("홍길동");
memberRepository.save(member);  // 새로운 엔티티 저장



기존 엔티티 업데이트 (update)

Member member = memberRepository.findById(1L).orElseThrow(() -> new RuntimeException("없음"));
member.setName("김철수");  // 값 수정
memberRepository.save(member);  // 수정된 엔티티를 저장, 자동으로 UPDATE 쿼리 실행

 

 


 

 

update 처리 예시

Controller에서 memberService로 update 요청한다.

@PostMapping("update")
public String update(MemberDto dto, RedirectAttributes redirectAttributes) {
    // 수정요청
    log.info("### DTO : " + dto);
    memberService.updateMember(dto);

    // 메세지 전송
    redirectAttributes.addFlashAttribute("msg", "정상적으로 수정되었습니다.");
    return "redirect:/member/view";
}

 

 

memberService에서 controller에서 건내준 dto를 받아 memberRepository로 update를 요청한다.

이 때 업데이트를 하기 위해 save() 메서드를 사용하고, dto에 있는 id가 존재하면 update가 되고, 없으면 insert된다.

public void updateMember(MemberDto dto) {
    // dto -> entity로 변환
    Member member = MemberDto.fromDto(dto);

    // 수정처리
    // save() : 해당 ID가 존재하면 수정, 없으면 신규로 입력
    memberRepository.save(member);
}
반응형