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

newguidance9님의 프로필 이미지
newguidance9

작성한 질문수

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

JPA와 DB 설정, 동작확인

안녕하세요 엔티티 매니저에 대해 질문이 있습니다!

작성

·

234

0

안녕하세요 쌤 jpa강의 열심히 듣고있습니다.! 궁굼한게 있어서 질문을 남깁니다. 저는 memberRepository 부분을 인터페이스로 구현하여 JpaRepository를 상속하였습니다.
배운대로라면 save할 시 영속성 컨텍스트에 해당 데이터가 남아있어 findBy를 했을 시 db에서 select해오는 것이 아니라 영속성 컨텍스트에서 값을 가져온다고 생각했었습니다. 그러나 결과는 셀렉트가 되어서 질문을 남깁니다. 작동하는 원리가 다른걸까요...제 고민을 들어주셔서 감사합니다!주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]
여기에 질문 내용을 남겨주세요.

답변 1

2

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

안녕하세요. newguidance9님

혹시 스프링 데이터 JPA를 사용하시나요?

그렇다면 findOneById? 이 부분이 문제입니다.

findOneById라고 하면 스프링 데이터 JPA는 다음과 같은 JPQL을 직접 실행하게 됩니다.

select m from Member m where mid=?

JPQL이 직접 실행되면 항상 SQL이 실행됩니다.

findById를 실행하시면 스프링 데이터 JPA가 영속성 컨텍스트에서 엔티티를 조회하는 em.find()를 실행합니다.

정리

em.find() vs JPQL

em.find() -> 영속성 컨텍스트를 먼저 조회하고 없으면 SQL을 실행

JPQL -> SQL을 먼저 실행

감사합니다.

newguidance9님의 프로필 이미지
newguidance9

작성한 질문수

질문하기