인프런 커뮤니티 질문&답변

김태경님의 프로필 이미지
김태경

작성한 질문수

스프링 DB 2편 - 데이터 접근 활용 기술

스프링 데이터 JPA 적용2

JpaItemRepositoryV2 예제에서 update 질문

작성

·

381

0

예제 소스에서 update 기능에서 단순히 set메서드만 수행하면 DB에 저장이 되지 않는거 같습니다.

repository.save까지 호출해야 되는게 아닌지요?

 

Item findItem = repository.findById(itemId).orElseThrow();
findItem.setItemName(updateParam.getItemName());
findItem.setPrice(updateParam.getPrice());
findItem.setQuantity(updateParam.getQuantity());
repository.save(findItem);

답변 1

1

안녕하세요. 김태경님, 공식 서포터즈 OMG입니다.
JPA는 변경감지란 기술로 필드만 수정해도 별도의 save()없이 값이 수정됩니다.

save()하지 않더라도 수정이 되어야 할텐데, 강의와 다르게 진행하신 부분이 있지 않나 예상합니다.

강의에서 제공해드리는 프로젝트 코드를 실행하여 확인해보시겠어요?

-
영한님의 JPA 활용1편 강의자료 일부 첨부합니다.

도움이 되는 부분은 코드가 작성된 부분과, 아래의 설명입니다.

update() 메서드의 구현코드를 보면 save()가 없으며 설명에도 나와있듯 "변경감지가 동작해서 Update SQL이 실행된다"를 확인해주세요 :)

image

감사합니다.

김태경님의 프로필 이미지
김태경
질문자

빠른 댓글 감사드립니다. 다시 확인해보니 @Transactional 을 빼놓아서 그랬네요. @Transactional을 빼면 디폴트로 autocommit으로 동작할거라 생각했는데, JPA에서는 아예 반영이 안되는군요.

단순조회를 제외한 등록, 수정, 삭제는 트랜잭션(@Transactional) 내에서 동작해야합니다 :)

김태경님의 프로필 이미지
김태경

작성한 질문수

질문하기