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

이원태님의 프로필 이미지

작성한 질문수

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

변경 감지와 병합(merge)

ItemController에서 ItemService.findOne을 통한 객체 찾기.

해결된 질문

21.10.22 17:47 작성

·

202

0

저는 아직 김영한 강사님의 jpa 기본 강의를 듣지 않았습니다!

(야생형으로 수강중)

만약 지금 질문드리는 내용이 jpa 기본 강의를 수강 시 충분히 해결될만한 문제라면, 제게 기본 강의를 참고하라고 한 마디 부탁드립니다.

 

제가 궁금한 건 강의 중반에 강사님께서 book을 수정하기 위해, ItemService 클래스에 updateItem이라는 메서드를 만드십니다.

이때 updateItem 메서드 내부에선 ItemRepository 클래스 내부의 메서드 findOne을 사용해 수정할 객체를 불러오시는데요.

"Item findItem = itemRepository.findOne(itemId)"

왜 ItemController의 클래스 내부의 메서드 uddateItem에서 수정할 객체를 불러오지 않는 것인지 잘 이해가 되지 않습니다.

"itemService.findOne(itemId)" 이런식으로 말입니다.

 

질문을 다 찾아봐도 이런 질문은 없는 걸 봐선 엄청 기초적인 착각을 하는 것 같지만, 아무리 생각해도 스스론 이해가 불가능해서 질문드립니다 ㅠㅠ..

 

감사합니다 :)

답변 2

2

David님의 프로필 이미지

2021. 10. 22. 18:05

안녕하세요. 이원태님, 공식 서포터즈 David입니다.

.
해당 파트 이름과 관련이 있습니다.

변경감지를 통한 업데이트인데요.

객체가 영속 컨텍스트에 의해 관리되고 있는 상태를 영속상태라고 합니다.

트랜잭션이 시작되고

findOne()으로 영속상태인 객체를 반환 받고

영속상태인 객체의 상태에 변경(setPrice, setName, setStockQuantity 등)이 발생하면

트랜잭션이 종료될 때 변경된 상태를 반영하기 위해 update 쿼리가 전달됩니다.

해당 파트에 대해 더 자세히 알고 싶으시다면 JPA 기본 강의를 수강하시면 좋습니다:)

.
감사합니다.

0

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

2021. 10. 23. 14:15

빠른 답변 감사합니다 :)

정말 감사하지만, 제가 질문해던 의도와는 다른 답변인 것 같아 다시 질문을 남기겠습니다.

 

첨부한 사진의 빨간부분이 제 질문의 핵심입니다.

 

강의에선 itemService 내부에 updateItem 메서드를 만들어 객체를 업데이트시키는데,

저는 itemService에 있는 findOne을 활용해서 객체를 업데이트 할 수 있다고도 생각합니다.

(이 부분이 왜 안되는 것인지 궁금합니다!)

강사님께서 itemService내부에 따로 메서드를 만들어서 객체를 업데이트 하셨으니 뭔가 잘못된 방법인건 알겠지만, 어떤 이유로 불가능한지 잘 모르겠어서..! 그 부분을 질문드린 것이였습니다.

감사합니다 :)

 

김영한님의 프로필 이미지
김영한
지식공유자

2021. 10. 23. 16:03

안녕하세요. 원태님 David님의 답변에 정답이 있습니다.

관련해서 JPA 기본편을 학습해보시면 자세히 이해가 되실거에요^^

감사합니다.

David님의 프로필 이미지

2021. 10. 24. 17:42

원래 질문 주셨던 내용에서는 update가 어떻게 진행되는지에서 물으셨던 걸로 기억합니다. 그래서 위와 같은 답변을 드렸었고요ㅎㅎ;

 

https://www.inflearn.com/course/ORM-JPA-Basic

위 강의의 영속성 컨텍스트 파트와 @Transactional에 대해 학습하시면 이해하실 수 있을거에요.

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

2021. 10. 26. 08:49

아.. 죄송합니다 ㅠ

정답을 말씀해주셨는데 제 지식이 얕아서 이해를 못한 것이였네요..

제가 생각했던 답변과 달라서, 제 질문의 의도를 잘못 파악하신 줄로만 이해했습니다..

다시 한번 제 실수로 번거롭게 해드려서 죄송합니다!!

 

감사합니다 :)