[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)
[질문 내용]
spring data jpa의 save를 사용할 경우 내부적으로 id 값으로 데이터가 있는지 확인하는 select 쿼리를 날리고 insert 또는 update를 합니다.
그럼으로 그냥 insert 하는 것 보다 1번의 쿼리(총 2번)가 더 발생합니다.
jpa의 persist를 사용하면 바로 insert를 하여 1번의 쿼리만 발생합니다.
저는 개인적으로 insert만 하는 경우 persist를 사용하고 있습니다.
Service에서 직접 EntityManager를 DI 받아 persist를 사용했습니다.
스프링 DB 1편 - 데이터 접근 핵심 원리 을 보다가 Service는 최대한 순수한 자바코드만 있는게 좋다는 말씀에 머리가 띵하더군요.
좋은 OOP 설계를 위해 save를 사용하거나 CustomRepository를 만들어 persist를 사용하거나 어떤게 더 좋은 방법일까요?
선생님은 실무에서 어떻게 사용하시는 지 궁금합니다!
선생님 답글 남겨주신 부분을 보고 제가 save의 동작 방식을 헷갈리고 있던 걸 알게되었습니다.
디버깅해서 isNew를 타고 가니 선생님이 애기해주신대로 id 값의 존재 유무로 따라 persist, merge를 호출하더군요.
정말 감사합니다.
한가지 더 궁금한게 있어서 문의드립니다.
persist를 사용하면 spring 이 변환해주는 exception(org.springframework.dao.*Exception)이 아니라 jdbc 설정된 db(h2)의 Exception을 직접 반환하더라고요.
db 강의를 듣고나서 생각했을 때는 spring이 변환해주는 Exception을 사용하기위해 save를 사용하는게 더 좋은 방법이라고 생각됩니다.
선생님의 의견이 궁금하여 문의드립니다!
실무에서는 save를 사용하는지가 궁금합니다!