작성
·
262
0
안녕하세요, 강의 잘 듣고 있습니다.
질문을 드리고 싶어서요.
영속성 컨텍스트에 엔티티A가 있다고 가정해 볼게요.
EntityManager의 em.find()를 통해 엔티티A를 조회하면, EntityManager는 영속성 컨텍스트에 있는 엔티티A를 반환하고, 실제 DB에 select 쿼리는 날리지 않는걸로 알고 있어요.
그런데 queryFactory는 생성자 인자로 EntityManager를 받고 있음에도, 왜 해당 강의 7분 21초에서는 select 쿼리가 나가나요??
queryDSL은 EntityManager 차원의 find 실행이 아니고, JPQL 차원의 쿼리 실행이라, 무조건 쿼리가 나가는 건가요??
"스프링 데이터 JPA의 findByUsername도 JPQL이 실행되기 때문에 항상 쿼리가 실행됩니다."
이 답변에 질문이 있어요!!
그럼 영속성 컨텍스트에 "엔티티A"가 있으니, select 쿼리를 날리지 않고 영속성 컨텍스트의 엔티티A를 바로 반환하는 것은 오직 "Entity의 id값(db의 pk값)을 통해 조회할 때(예: em.find())"만 인가요??? 필드(컬럼)값을 기준으로 검색할 때는 무조건 JPQL이 실행되기 때문에 항상 쿼리가 실행되나요??