반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- post
- Thymeleaf
- SEO
- firebase
- 데이터베이스
- Polylang
- 워드프레스
- 구글알고리즘
- JPA
- linkedhastset
- @Entity
- set
- @Query
- router
- 구글애널리틱스
- useEffect
- @Repository
- mergeattributes()
- configureviewresolvers()
- GA4
- 리액트오류
- 플러그인
- 인텔리제이
- HttpSession
- GET
- 구글
- Login
- addallattributes()
- ChatGPT
- addflashattribute()
Archives
- Today
- Total
개발천재
[Spring Boot] JPA에서 save()가 update 역할을 하는 이유 본문
반응형
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);
}
반응형
'개발 준비 > Spring Boot' 카테고리의 다른 글
[Spring Boot] Bean을 정의하는 어노테이션 (1) | 2025.02.18 |
---|---|
[Spring Boot] Intercepter와 HandlerInterceptor (1) | 2025.02.18 |
[Spring Boot] JPA와 Hibernate (2) | 2025.02.17 |
[Spring Boot] 인텔리제이에서 DB 정보 환경 변수 설정하기 (2) | 2025.02.17 |
[Spring Boot] Hibernate와 JPA: @Entity부터 @Table까지 한 번에 이해하기 (0) | 2025.02.17 |