• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

Movie 엔티티 조회 시 실행되는 SQL Query가 강의 영상과 상이한 이슈에 대한 질문입니다.

24.01.26 23:46 작성 24.01.26 23:50 수정 조회수 205

2

[질문 템플릿]
1. 강의 내용과 관련된 질문인가요?
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요?
3. 질문 잘하기 메뉴얼을 읽어보셨나요?

[질문 내용]
안녕하세요, 고급 매핑 - 상속관계 매핑 강의 영상 16:15 부분에서 Movie 엔티티 조회 코드 실행 결과로 출력되는 SQL Query와 저의 프로젝트의 코드 실행 결과로 출력되는 SQL Query가 상이하여 질문드립니다.

 

우선 프로젝트 생성은 2024 최신 버전으로 프로젝트 설정하기 문서를 참고해서 진행하였으며, 아래와 같이 작성한 코드 일부와 실행 결과로 출력되는 SQL Query를 첨부드립니다.

Movie findMovie = em.find(Movie.class, movie.getId());
select
    m1_0.id,
    m1_1.name,
    m1_1.price,
    m1_0.actor,
    m1_0.director 
from
    Movie m1_0 
    join Item m1_1 on m1_0.id=m1_1.id 
where
    m1_0.id=?

위와 같이 강의 영상처럼 SELECT문의 형태가 MOVIE 테이블과 ITEM  테이블의 INNER JOIN이 아닌 INNER JOIN을 직관적(?)으로 나타내고 있지 않는데요.

 

한가지 예상되는 건 2024년도 기준 프로젝트 생성 시 하이버네이트, H2 DB 버전이 강의 내용에서 다루는 버전들보다 업그레이드 되어 동작 방식이 달라져서 그런게 아닐까 생각이 듭니다.

 

이 부분이 맞다면 만약, 강의와 동일한 SQL Query를 출력해 보고 싶다면 프로젝트에서 사용중인 라이브러리 버전들을 다운그레이드하는 방법밖에는 없을까요?

<!-- TODO s:pom.xml 코드 일부 -->
<properties>
    <maven.compiler.source>21</maven.compiler.source>
    <maven.compiler.target>21</maven.compiler.target>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<dependencies>
    <!-- JPA 하이버네이트 -->
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>6.4.2.Final</version>
    </dependency>

    <dependency>
        <groupId>javax.xml.bind</groupId>
        <artifactId>jaxb-api</artifactId>
        <version>2.3.1</version>
    </dependency>

    <!-- H2 데이터베이스 -->
    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <version>2.2.224</version>
    </dependency>   
</dependencies>
<!-- TODO e:pom.xml 코드 일부 -->

 

답변 1

답변을 작성해보세요.

2

안녕하세요. Henu님

원래 JOIN 문법은 INNER JOIN, OUTER JOIN으로 표현하는데요.

앞에 INNER를 생략하고 JOIN만 사용하면 INNER JOIN이 됩니다 🙂

하이버네이트 버전이 업데이트 되면서 이 부분을 생략했는데요. 기존과 같은 쿼리이기 때문에 이 부분은 걱정하지 않으셔도 됩니다. 개발자들이 관례적으로 inner join의 경우 inner는 생략하기 때문에 이 부분도 생략한 것으로 이해하시면 됩니다.

P.s: 질문을 어떻게 해야하는지 맥락과 버전을 최대한 잘 설명해주셔서 너무 좋네요 ㅎㅎ

감사합니다.

Henu님의 프로필

Henu

질문자

2024.01.28

궁금증이 해결되었습니다! 감사합니다.