• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

QueryDsl 1차 캐시관련

21.04.25 23:40 작성 조회수 559

1

안녕하세요, 강사님!

강의를  복습하다가 궁금증이 생겨 질문 남깁니다.

조회된 엔티티는 영속화되며 1차 캐시에 저장이 되고 

특별한 이벤트?! (EntityManager.clear() 또는 Transation이 종료 등등..)로 1차 캐시 내용이 없어진다고 이해하고 있습니다.

이렇게 이해한 내용 토대로  QueryDsl을 사용해도 1차 캐시를 사용하겠지라는 생각과는 다르게 동작하여 개념이 혼돈되고 있습니다.

아래 사진을 참고하시면

첫번째 쿼리를 실행후 그다음 쿼리 실행시 1차 캐시된 엔티티를 찾아 반환해 줘야하는데 다시 DB에 쿼리를 날려 결과를  가지고왔습니다.

제가 어떤 부분을 잘못 이해하고 있는 걸까요?

답변 1

답변을 작성해보세요.

2

안녕하세요. 데비님^^

em.find()는 영속성 컨텍스트에서 바로 찾아옵니다.

그런데 JPQL의 경우 항상 SQL로 번역되어서 우선 실행이 됩니다.

작성하신 부분도 결국 JPQL이 실행되는 것이기 때문에 SQL이 실행되는 것이 맞습니다.

감사합니다.

데비님의 프로필

데비

질문자

2021.04.27

답변 감사합니다!!