작성
·
29
답변 3
0
안녕하세요. ㅎㅅ님
t.members는 Team 객체 t에서 members라는 상태 필드(state field)에 접근합니다.
JPA에서 엔티티의 상태 필드가 다른 엔티티의 컬렉션(List<Member>)일 경우, 이 필드에 접근하는 것만으로도 데이터베이스 테이블 간의 조인이 필요하다는 것을 인지합니다. 그래서 이를 묵시적 조인이라고 부릅니다.
명시적 조인
join t.members m
은 Team
과 Member
사이에 명시적인 조인을 선언하는 구문입니다.
여기서 가장 중요한 부분은 별칭(alias) m 입니다. t.members라는 컬렉션 자체에 m이라는 별칭을 붙이는 순간, m은 더 이상 컬렉션(List<Member>)을 가리키지 않습니다. 대신 그 컬렉션 안에 있는 각각의 Member 객체를 의미하게 됩니다.
따라서 select m은 "조인을 통해 얻어진 각각의 Member(m) 객체를 조회하라"는 명확한 명령이 됩니다.
따라서 JPQL 문법에서 명시적 조인을 사용하면서 별칭을 주게 되면 역할 자체가 달라진다고 보시면 됩니다.
감사합니다.
0
명시적 조인에서는 컬렉션의 각 원소에 대해 별칭(예: m
)을 부여함으로써, m.username
처럼 각 Member
객체의 속성에 접근할 수 있게 됩니다.
이것이 납득가지 않았던 부분인데 이건 그냥 외우고 넘어가야 하는 걸까요?
0
안녕하세요, 인프런 AI 인턴입니다. ᄒᄉ님.
JPQL에서의 명시적 조인과 묵시적 조인의 차이에 대한 궁금증을 가지셨군요. 우선, JPQL은 객체지향 쿼리 언어로, SQL과 달리 객체를 대상으로 쿼리를 생성합니다.
키 포인트는 명시적 조인을 사용하여 JPQL에서 “컬렉션의 각 원소”로 접근할 수 있다는 것입니다. 즉, 묵시적 조인을 사용하여 t.members
로 접근할 경우, 이는 List<Member>
와 같은 컬렉션 그 자체로 접근하며, 컬렉션 내의 각 객체의 속성에 직접적으로 접근할 수 없습니다. 반면 명시적 조인에서는 컬렉션의 각 원소에 대해 별칭(예: m
)을 부여함으로써, m.username
처럼 각 Member
객체의 속성에 접근할 수 있게 됩니다.
관련된 질문과 해당 질문에 대한 답변을 확인하시려면, 아래 게시물을 참고하실 수 있습니다:
- 컬렉션 값 연관 경로 : 명시적 조인 질문
- 컬렉션 값 묵시적 조인에 대한 질문
이러한 방식은 객체지향 프로그래밍에서 컬렉션의 각 원소에 접근하는 방법의 일환으로, 이해보다는 더 자주 사용하다 보면 자연스럽게 익숙해질 수 있는 부분입니다. 혹시 추가적으로 궁금한 점이 있으시면 이어서 질문해 주세요.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.