• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

Select 없이 Update만 하고 싶은 경우 베스트 프랙티스가 있을까요?

19.01.17 21:29 작성 조회수 249

0

안녕하세요 백기선님.

운영중인 프로젝트에 JPA를 적용하다가 Select 없이 Update만 할 경우를 자주 마주합니다.

멤버의 Id와 변경할 포인트를 전달 받아 포인트를 업데이트 하려하면

아래와 같은 순서로 진행해야합니다.

Member member = memberRepo.findById(id)

member.setPoint(member.getPoint + point);

memberRepo.save(member)

이때 member를 select 하는 구문 없이 이번강의에서 알려주신

@modifying(clear...,flush...)와 @query를 이용하면 좋겠다는 생각이 들었거든요.

만약 pointUpdate(memberId, pointAmount)라는 서비스를 제공할 때,

clear와 flush를 보장한다면 서비스를 사용하는 사람도 안심하고 쓸 수 있을것 같구요.

무엇보다 매력적인건 select 한번을 줄일 수 있는 점 같습니다.

테스트 코드에서는 테스트 객체 생성을 위한 create 구문이 있어서

백기선님께서 말씀주신 방향으로 가는게 최적케이스 같습니다.

하지만 기존에 영속화된 엔티티 대상으로 update만 날리기 위해서는

어떤 방법이 더 효율적이라고 생각하시는 지, 주로 사용하시는 패턴이 있으신지 궁금합니다.

답변 1

답변을 작성해보세요.

0

셀렉트 쿼리 해보지 않고 바로 업데이트 쿼리만 할 수 있는 방법도 있긴 있어요. 가장 쉬운 예로는 네이티브 쿼리를 만들어 보낸다던지.. 그런데 정말 그래도 안전하겠어요? id값이 제대로 넘어온건지 검증은 안해도 되는건가요?

해당 엔티티에 대한 쿼리가 자주 발생하는건 2차 캐싱을 통해 해결할 수 있습니다. 제 생각엔 그 방법이 더 안정한고 효율적일거 같습니다. "하이버네이트 2차 캐시"라는 키워드로 검색해 보시거나, 김영한님 책을 참고해 보세요.

좋은 질문 감사합니다.