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에서 묵시적으로 조인이 일어남을 반드시 알아야한다.
'JPA' 카테고리의 다른 글
[JPA] 일대다 조인할때 영속성 컨텍스트 내부 모습 & distinct (0) | 2020.08.06 |
---|---|
[JPA / JPQL] 페치조인 & 지연로딩 (0) | 2020.08.06 |
[JPA] @Embeddable , @Embedded (0) | 2020.08.06 |
[JPA] CASCASDE 옵션 & orphanRemoval (0) | 2020.08.06 |
[JPA] 프록시 (Proxy) 객체 & fetch = EAGER & LAZY (0) | 2020.08.06 |
댓글