728x90
반응형
경로 표현식
경로표현식이란 .(점) 으로 접근하여 그래프를 탐색하는 것이다.
묵시적 내부조인
- 묵시적 내부조인이란 JPA가 자동으로 join을 만드는 것을 말한다.
- 묵시적 내부조인은 연관관계 때문에 발생한다.
- 예를 들어 Memeber 클래스 안에 Team 객체가 있다면?
- DB는 테이블 개념이기 때문에 Member 의 Id 와 일치하는 Team 의 FK 를 기준으로 값을 가져오기 때문이다. - 객체에서는 .(접근자) 로 조회 하지만 DB 에서는 Join 으로 가져오는 방법밖에 없다.
- 결론부터 말하면 묵시적 조인은 절대 쓰면 안된다.
- 예측하기 힘들고 튜닝할때 힘들다.
표현 필드 종류
상태필드
- 단순히 값을 저장하기 위한 필드
- m.username 정도 된다.
연관필드:
- 단일값 연관필드:
- 대상이 엔티티 인 필드이다.
- 해당 객체 안에 포함되어있는 객체를 말한다.
- private Team team;
- 컬렉션 값 연관필드
- 대상이 컬렉션인 객체
- 해당 객체안에 컬렉션으로 객체를 가지고 있는경우
- private List<Member> members;
예제
select
m.username -> 접근자(.)을 이용하여 값을 바로 찍은것은 상태 필드이다.
from Member m
join m.team -> 엔티티로 넘어 갔기 때문에 단일값 연관 필드라 한다.
join m.orders o -> 컬렉션 값 연관 필드 이다.
where t.name = 'teamA'
경로표현식의 특징
상태필드
- 경로탐색의 끝이다 더이상 갈 곳이 없다.
- 탐색이 불가능하다.
- m.username 에서 더이상 탐색할게 없다.
단일값 연관경로
- 묵시적 내부조인이 발생한다.
- 탐색이 가능하다.
- m.team.name
- 멤버 객체에서 team 에 접근후 다시 team.name 으로 접근했다.
컬렉션값 연관경로
- 묵시적 내부조인이 발생한다.
- 탐색이 불가능하다.
- 탐색을 하고 싶은경우 join 문을 명식적으로 사용하여 별칭을 이용한여 접근한다.
// collection 예제
String collectionQuery = "select t.members from JPQLTeam t";
List<Collection> result = em.createQuery(collectionQuery, Collection.class)
.getResultList();
System.out.println("getCollection = " + result);
// members 에서 username을 가져오고 싶은경우
// 직접 join 문을 써서 별칭으로 가져온후 접근한다.
String collectionQuery2 = "select m.username from JPQLTeam t join t.members m";
List<String> result2 = em.createQuery(collectionQuery2, String.class)
.getResultList();
for(String name : result2) {
System.out.println("getCollection = " + name);
}
참고:
https://www.inflearn.com/course/ORM-JPA-Basic/lecture/21727?tab=note&mm=close
728x90
반응형
'DataBase > JPA' 카테고리의 다른 글
[JPA] JPQL 엔티티 직접 사용 (0) | 2021.09.28 |
---|---|
[JPA] JPQL Fetch Join (0) | 2021.09.26 |
[JPA] JPQL 기본함수, 사용자 정의 함수 호출 (0) | 2021.09.25 |
[JPA] JPQL CASE (0) | 2021.09.25 |
[JPA] JPQL TYPE (0) | 2021.09.24 |
댓글