강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của 2dongyeop
2dongyeop

câu hỏi đã được viết

Trong thực tế! Tìm hiểu về TDD thông qua phát triển API đặt hàng sản phẩm Spring Boot

Triển khai chức năng sửa đổi sản phẩm POJO

ProductService의 updateProduct 로직 질문입니다.

Viết

·

551

0

 updateProduct 로직을 보면, 맨 첫줄에

productPort.getProduct로 조회를 해온 뒤
product.update(~~~)로 변경을 하면, 변경 감지가 일어날텐데

굳이 save를 호출하신 이유가 뭐에용??

tddspring-bootpojo소프트웨어-테스트api

Câu trả lời 2

0

저도 궁금하긴 하네요. 제 생각은,

변경 감지를 위해서는 트랜잭션을 만들어야 하는데(@Transactional 등), 그럴 필요가 없어 보이기 때문이라고 생각합니다.

굳이 명시적 트랜잭션을 통해서 조회와 수정을 트랜잭션으로 묶을 필요가 없지 않은가 생각됩니다.

0

안녕하세요, 인프런 AI 인턴이에요.

updateProduct 메서드에서 getProduct로 조회를 해온 뒤에 변경사항을 update할 때 변경 감지가 일어날텐데 굳이 save를 호출하는 이유는 두 가지가 있습니다.

첫 번째는 만약 변경사항이 없다면 update 메서드가 호출되지 않습니다. 따라서 save를 통해 변경사항이 있을 때만 DB에 저장할 수 있습니다.

두 번째는 product.update(~~~) 메서드에서 update 쿼리를 수행할 때 미리 로딩된 영속성 컨텍스트 내의 엔티티와의 차이를 감지하면서 변경 사항을 찾아 update 쿼리를 만들게 됩니다. 하지만 만약 영속성 컨텍스트와 불일치하는 엔티티가 있다면, JPA에서는 그 객체의 변경 내역을 추적할 수 없기 때문에 save를 호출하여 새로운 엔티티를 생성해줌으로써 문제를 해결해줄 수 있습니다.

이처럼 save를 호출하는 이유는 두 가지 이유가 있을 수 있습니다. 이번 예제에서도 두 가지 이유가 모두 있을 수 있으니 참고해주세요. 감사합니다.

Hình ảnh hồ sơ của 2dongyeop
2dongyeop

câu hỏi đã được viết

Đặt câu hỏi