본문 바로가기
JPA

[JPA / JPQL] @ManyToOne, @OneToOne 과 묵시적 조인

by onejunu 2020. 8. 6.

JPQL 은 엔티티를 대상으로 날리는 sql 과 비슷하다. 

 

JPQL에서 주의해야할 점이 있다.

 

만약 User 라는 객체에 Team이라는 객체가 @ManyToOne으로 매핑되었다고 가정하자.

 

유저마다 유저가 속한 팀을 가져오라는 쿼리는 다음과 같다.

select u.team from User u ;

 

그러면 당연하게 받아 들일 수도 있다. 하지만 실제 sql 을 보면 JOIN문이 들어가 있다.

 

그럴수 밖에 없다. 유저의 팀을 가져오려면 유저와 팀을 조인해야한다. 이를 JPQL에서는 묵시적으로 조인해준다.

 

실제 날리는 쿼리는 아래와 같다.

 

select t from User u join u.team t

 

 

이처럼 단일값을 연관관계로 가지는@ManyToOne 이나 @OneToOne 에서  "."  을 이용하여 가져온다면

 

jpql에서 묵시적으로 조인이 일어남을 반드시 알아야한다.

댓글