from 절의 서브 쿼리에서 여러 값 조회
125
작성한 질문수 58
[질문 내용]
from 절의 서브 쿼리를 작성하였을 때 조회로 여러 값이 나오게 테스트를 한번 만들어 보았는데요.
// 페이징 쿼리
String query = "select new jpqljpa.MemberDTO(mm.mUser, mm.mAge) from (select m.username mUser, m.age mAge from Member m) mm";
List<Member> result = em.createQuery(query, Member.class).getResultList();
System.out.println("result = " + result.get(0));이렇게 하였을 때, 에러없이 나오긴합니다. 어떤 메커니즘으로 해당 쿼리가 문제없이 나오는지 구체적으로 알려주실수 있나요?
그리고 추가 질문으로 출력된 결과가
result = jpqljpa.MemberDTO@4def42c3
객체 메모리값으로 나오게되었는데 이름, 나이의 값을 출력하고싶다면 어떻게 코드를 쳐야 할까요?
답변 2
0
안녕하세요. soojinkimss님
AI 인턴이 잘 답변해주었는데요.
추가로 말씀드리자면 강의 메뉴얼에 추가된 내용처럼 hibernate 최신버전 부터 해당 기능을 지원합니다.
감사합니다.
0
안녕하세요, 인프런 AI 인턴입니다.
soojinkimss님께서 질문하신 부분에 대해 설명드리겠습니다.
우선 from 절 내에 서브 쿼리가 있는 경우 JPA JPQL에서는 직접적으로 지원되지 않는 형태입니다. JPA는 JPQL을 통해 객체 지향 쿼리를 지원하고, 데이터베이스의 SQL 서브 쿼리와 같은 복잡한 구조는 사용할 수 없습니다. 대신 쿼리를 나누거나 추상화된 개체 매핑을 활용하는 방식을 사용해야 합니다.
현재 보여주신 코드가 실행되는 이유는 JPQL이 아니라 네이티브 SQL을 작성하거나, 다른 방법으로 쿼리를 구성한 것이 아닐까 사료됩니다. 예를 들어, Hibernate의 HQL이나 Entity Manager의 createNativeQuery를 통해 가능합니다.
추가 질문에 대해:
Java는 객체의 toString 메소드를 호출할 때 기본적으로 객체의 해시 값을 출력합니다. 이를 원하는 값으로 출력하기 위해서는 MemberDTO 클래스의 toString 메소드를 오버라이드해야 합니다. 다음과 같은 방법으로 toString 메소드를 추가해 보세요.
public class MemberDTO {
private String mUser;
private int mAge;
public MemberDTO(String mUser, int mAge) {
this.mUser = mUser;
this.mAge = mAge;
}
@Override
public String toString() {
return "MemberDTO{" +
"mUser='" + mUser + '\'' +
", mAge=" + mAge +
'}';
}
}
이렇게 toString 메소드를 정의하시면, 출력 시 mUser와 mAge의 값이 출력될 것입니다.
추가로 필요한 부분이 있으면 언제든지 질문해 주세요!
참고 자료로서 관련 문서의 URL도 함께 공유드립니다:
Spring Data JPA - Reference Documentation
벌크연산에서 member.getAge 호출 시 영속성 컨텍스트에서 데이터를 가져오는건가요?
0
33
2
inheritance startegy 선택시 고려사항
0
24
1
Entity 동등성 비교
0
23
1
실무 조언 관련 질문입니다.
0
48
1
H2데이터베이스 파일 생성
0
58
2
서브쿼리 강의에서 ALL 예시 관련 질문드립니다.
0
57
2
수정또는 삭제시 영속성 엔티티에 값이 무조건 있어야 하나요?
0
58
1
JPQL 메소드와 락
0
55
1
Delivery @OneToOne
0
61
1
17강 4~5분대 테이블 값 조회가 안됩니다.
0
98
2
UnsupportedOperationException 발생
0
87
3
H2 Database 연결이 안됩니다.
0
98
2
연관관계 매핑 질문드립니다.
0
88
2
h2데이터베이스 실행오류
0
110
2
persistence.xml
0
112
2
양방향 연관관계에서 연관관계의 주인(mappedBy)을 왜 꼭 정해야 하나요?
0
83
1
영속성 컨텍스트
0
69
1
JPA 프록시
0
98
1
Native Query와 MyBatis
0
72
1
영속성 컨텍스트는 어떤 메모리에 저장되는건가요?
0
92
1
임베디드 타입 예시 코드 관련 질문
0
121
3
명시적 조인에서 별칭을 주면 왜 객체에 접근할 수 있나요
0
96
3
인텔리제이 패키지 커서 단축키 질문
0
109
2
혹시 현재는 ID 데이터 타입이 String이면 안되나요?
0
149
1





