맛집 수정 API 질문입니다
editRestaurant() 메서드에서요, RestaurantEntity restaurant = restaurantRepository.findById(restaurantId).orElseThrow(()->new RuntimeException("없는 레스토랑입니다")); restaurant.changeNameAndAddress(request.getName(), request.getAddress()); //restaurantRepository.save(restaurant);
여기서 save는 안해도 될 것같습니다.
영속성컨테이너에 이미 있는 엔티티라 수정을 하면 save를 안해도 반영이 되는것으로 알고 있습니다.
Answer 1
3
안녕하세요 지식공유자 쥬쥬입니다!
말씀하신대로 JPA에서는 영속성컨텍스트에 있는 Entity의 더티체킹을 통해 update 쿼리를 날려주므로 save() 메소드를 호출하지 않아도 데이터베이스에 반영됩니다! 좋은 말씀이신 것 같습니다!
하지만 이것은 JPA Native한 기능(spring-data-jpa가 가지고 있는 특징이란 뜻입니다!)으로, @Repository의 save() 메소드를 명시적으로 호출해주는 것이 특정 상황에서는 좋을 수 있습니다.
예를 들어, 다음과 같은 요구사항이 생겼다고 가정해볼게요!
JPA로 선언한 Entity를 다른 spring-data 라이브러리로 교체할 경우 (mongo db나 r2dbc와 같은)
이 때 JPA를 사용할 때에는 동작했던 코드들이 단순히 spring data 구현체를 교체함으로써 동작이 안하는 상황이 발생할 수 있습니다!
사실 위같은 상황은 많이 발생하지는 않습니다. 저 같은 경우에는 메모리에 있는 객체의 상태가 변경되었다면 저장소(Repository)에 다시 저장(save)해주는 코드가 명시적으로 있는 것이 조금 더 "자연"스럽다고 느껴지는데요. 이것은 제 느낌일 뿐 개개인이 모두 다르게 느낄 수 있다고 생각합니다.
인프넌님이 위같은 견해들을 함께 생각해보시고, 더 낫다고 판단되는 방향으로 개발하시는 것이 가장 좋다고 생각합니다!
Appendix.
JPA의 더티체킹 기능은 마틴파울러의 저서 엔터프라이즈 애플리케이션 아키텍처 패턴 (P of EAA)의 작업 단위(Unit of Work) 패턴을 읽어보시면 이해하기가 더욱 좋으실거에요!
lombok 설정에서 오류가 발생해요
0
176
2
2 -1 lombok 설정에서 오류가 발생해요
0
224
3
서비스 메소드 작성 시 질문!
0
346
2
RestaurantApi 컨트롤러 개발 질문
0
275
2
@Transactional 질문 있습니다!
0
275
2
변경데이터 저장 방법 질문 있습니다!
0
342
2
dto 관련 질문입니다.
0
388
2
이너 클래스 vs 클래스 별도 생성의 차이?
0
376
2
TestEntityApi중 createTestEntity에서 질문있습니다
0
228
2
ResponseBody 강의에서 클래스 생성 관련 질문드립니다.
0
225
2
2-3 진행 중 에러 발생
0
356
2
ReviewDto 객체 사용 이유
0
313
2
2-2 h2 console connect 관련 질문 드립니다.
0
296
1
소스작성중에서요 queryFactory중에?
0
415
3
docker에 관하여 질문 드립니다.
1
297
1
DTO, Request, Response 차이점
1
1274
1
TestRepositoryImpl 질문이요
3
317
1
pk, fk 연결
1
512
2
.gitignore 에 포함할 파일
0
1007
1
Spring Initializr 스프링 버전
0
262
1
2-4 수정중 오류
0
327
1
1-6 생성자 오류
1
265
2
2-3 진행중 에러
0
275
1
IP주소:8080/h2-console 을 했을때 404 에러가 발생합니다.
2
2599
1

