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

닉네임님의 프로필 이미지
닉네임

작성한 질문수

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

서브 쿼리

from절의 서브쿼리 테스트 문제

해결된 질문

작성

·

208

·

수정됨

0

[질문 내용]

하이버네이트 6에서 from절의 서브 쿼리 테스트 위해 다음과 같은 쿼리를 작성해서 실행 했는데, 쿼리가 날아가지 않습니다. 잘못된 부분이 있을까요?

스크린샷 2024-06-21 오후 6.02.16.png

답변 1

0

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

안녕하세요. 닉네임님

도움을 드리고 싶지만 질문 내용만으로는 답변을 드리기 어렵습니다.

실제 동작하는 전체 프로젝트를 ZIP파일로 압축해서 구글 드라이브로 공유해서 링크를 남겨주세요.

구글 드라이브 업로드 방법은 다음을 참고해주세요.

https://bit.ly/3fX6ygx

주의: 업로드시 링크에 있는 권한 문제 꼭 확인해주세요

 

추가로 다음 내용도 코멘트 부탁드립니다.

1. 문제 영역을 실행할 수 있는 방법

2. 문제가 어떻게 나타나는지에 대한 상세한 설명

링크: 공식 서포터즈

링크: 자주하는 질문

감사합니다.

닉네임님의 프로필 이미지
닉네임
질문자

링크

1. 문제 영역을 실행할 수 있는 방법

test/java/section10/SubQueryTest의 test5 함수 실행시키면 됩니다.

2. 문제가 어떻게 나타나는지에 대한 상세한 설명

test5 함수를 실행시켰을 때, 쿼리가 날아가길 기대하였지만, 날아가지 않는 문제 있습니다.

안녕하세요. 닉네임님, 공식 서포터즈 y2gcoder입니다.

보내주신 코드 살펴봤습니다!

먼저 해당 테스트 코드에서 발생한 에러를 확인해보고 싶으시다면 catch 문 내에 에러를 출력하는 프린트 문 하나를 추가해주시면 디버깅할 때 아주 좋습니다!

image

저도 테스트 해봤을 때, 동일한 에러가 발생했고,

error: org.hibernate.query.SemanticException: Select item at position 1 in select list has no alias (aliases are required in CTEs and in subqueries occurring in from clause)

살펴보니 에러에서 말하는 것처럼 from 절 내의 서브쿼리가 조회하는 대상 칼럼이 2개 였고, 별칭이 따로 없었습니다!

그래서

//when
List<Double> resultList = em.createQuery("select avg(m.mAge) from (select mm.username as mUsername, mm.age as mAge from Member mm) m", Double.class)
                    .getResultList();

다음과 같이 서브 쿼리 대상 칼럼에 별칭을 붙여주니 정상적으로 쿼리가 나가는 모습을 볼 수 있었습니다!

image

 

감사합니다.

닉네임님의 프로필 이미지
닉네임

작성한 질문수

질문하기