프로젝트 git url | github.com/rtef23/JpaStudy |
필요 | 1. docker 2. docker-compose |
프로젝트 정보 | mysql : 5.7 - docker image java : 1.8 |
경로표현식
- 점을 찍어서 객체 그래프를 탐색하는 것
//[JPQL]
SELECT m.username //상태필드
FROM Member m
JOIN m.team t //단일 값 연관 필드
JOIN m.orders o //컬렉션 값 연관 필드
WHERE t.name = 'teamA'
상태 필드(state field)
- 단순히 값을 저장하기 위한 필드
- 경로 탐색의 끝, 추가 탐색 불가
연관 필드(association field)
- 연관 관계를 위한 필드
- 단일 값 연관 필드
- @ManyToOne, @OneToOne 대상이 엔티티
- 묵시적 내부 조인(INNER JOIN) 발생, 추가 탐색 가능
//[JPQL]
SELECT m.team
FROM Member m
//[SQL]
SELECT t.*
FROM Member m
INNER JOIN Team t
ON m.team_id = t.id
- 컬렉션 값 연관 필드
- @OneToMany, @ManyToMany 대상이 컬렉션
- 묵시적 내부 조인 발생, 추가 탐색 불가
- FROM 절에서 명시적 조인을 통해 별칭을 얻으면 별칭을 통해 탐색 가능
- size만 사용 가능(COUNT 쿼리로 대체되어 실행됨)
//[JPQL]
SELECT t.members
FROM Team t
//[JPQL]
SELECT t.members.size
FROM Team t
//[SQL]
SELECT (
SELECT COUNT(m.team_id)
FROM Member m
WHERE t.id = m.team_id
)
FROM Team t
//[JPQL]
SELECT m.username //Member에 대해 탐색이 가능해진다.
FROM Team t
JOIN t.members m
- 명시적 조인
- Join 키워드 사용
- 묵시적 조인
- 경로 표현식에 의해서 묵시적으로 SQL 조인 발생
- Inner Join만 가능(Outer Join을 위해서는 명시적으로 사용)
- 묵시적 조인보다는 명시적 조인을 사용하는게 좋다.
'JPA' 카테고리의 다른 글
[JPA] 27. Fetch 조인 - 한계 (0) | 2021.02.16 |
---|---|
[JPA] 26. Fetch 조인 - 기본 (0) | 2021.02.11 |
[JPA] 24. JPQL - 타입 표현, 기타식 (0) | 2021.01.31 |
[JPA] 23. JPQL - 조인, 서브 쿼리 (0) | 2021.01.31 |
[JPA] 22. JPQL - 기본 문법 2 (0) | 2021.01.27 |