인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

윤승환님의 프로필 이미지
윤승환

작성한 질문수

자바 ORM 표준 JPA 프로그래밍 - 기본편

소개

CreateNativeQuery..

작성

·

257

2

강의 28:50~30:00까지를 수강하고 질문 남깁니다.

 

entitymanger로부터 createNativeQuery를 받아와서 실제 SQL처럼 구문을 작성하면 알아서,, persist에 있던 것들 Flush해주고 원하는 값을 잘 가져오는데..

JDBCtemplate를 함께 사용해서.. connection받아오고,, 쿼리 작성하고 실행하고,, 이렇게 받아오는 로직과 굳이 같이 써야 하는 상황이 존재할까요...? 

동적쿼리생성이라면,, nativeQuery는 불가능한건가요...

 

이런 의문점이 생겨 질문합니다..

답변 1

2

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

안녕하세요. 윤승환님

네이티브 쿼리를 사용하지만, 엔티티로 조회해야 하는 경우라면 네이티브 쿼리를 필수로 사용해야 합니다.

그렇지 않고, 단순히 데이터 조각(DTO)을 조회한다면 JDBCtemplate을 사용하셔도 됩니다.

감사합니다.

윤승환님의 프로필 이미지
윤승환
질문자

엔티티로 조회해야하는 경우... -> NativeQuery를 작성해서 실행하는 구문으로 알고있는데 '필수'로 사용해야 한다는 부분이 이해하기 어렵습니다..

 

제가 생각하기로는..

1. JPQL : 엔티티 대상으로 연관관계를 매핑하여 원하는 엔티티를 찾는 Qeury

2. NativeQuery를 사용한다 : JPQL에서 해결할 수 없는 상황(ex. 엔티티관의 연관관계가 아닌 실제 테이블을 직접 join해서 원하는 데이터를 가져와야하는 상황)에서 대안으로 사용할 수 있는 query

이렇게 생각을 하고 있는데,, '엔티티로 조회해야하는 경우라면 네이티브 쿼리를 필수..'이 부분이 이해가 가지 않습니다..

 

혹시 제가 생각한 1,2 번이 잘못 된 생각일까요..?

 

또한 다음과 같이 1,2번의 생각으로는,, JDBCtemplate를 직접 사용할 필요가 없다고 생각해서 질문드렸습니다.

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

안녕하세요. 승환님

데이터를 조회할 때는 크게 2가지로 조회할 수 있습니다. 

1. 영속성 컨텍스트에서 관리되는 엔티티

2. 단순 데이터의 모음인 DTO

엔티티로 조회한다는 뜻은 영속성 컨텍스트에서 관리되는 엔티티를 조회한다는 뜻입니다.

감사합니다.

윤승환님의 프로필 이미지
윤승환

작성한 질문수

질문하기