![[JPA] - JPQL 조인](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FQZC7e%2FbtsJHxz76yI%2FAAAAAAAAAAAAAAAAAAAAAFxs7odvfyD9RqXmiwW0EB-b9bmR7mIPwxODErunKFHN%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3DVslJzXbQa5wd83HYVTYiBAmxstk%253D)
[JPA] - JPQL 조인Dev/JPA2024. 9. 23. 00:43
Table of Contents
조인
- 내부조인 : select m from Member m join m.team t
- 외부조인 : select m from Member m left join m.team t
- 세타조인 : select count(m) from Member m, Team t where m.username = t.name
Team team = new Team();
team.setName("teamA");
em.persist(team);
Member member = new Member();
member.setUsername("member1");
member.setAge(10);
em.persist(member);
member.setTeam(team);
em.flush();
em.clear();
String query = "select m from Member m left outer join m.team t";
List<Member> result = em.createQuery(query, Member.class).getResultList();
@Entity
public class Member {
@Id @GeneratedValue
private Long id;
private String username;
private int age;
@ManyToOne
@JoinColumn(name = "TEAM_ID")
private Team team;
Hibernate:
/* select
m
from
Member m
join
m.team t */ select
m1_0.id,
m1_0.age,
m1_0.TEAM_ID,
m1_0.username
from
Member m1_0
join
Team t1_0
on t1_0.id=m1_0.TEAM_ID
Hibernate:
select
t1_0.id,
t1_0.name
from
Team t1_0
where
t1_0.id=?
Team과 조인하고 사용하지도 않았는데 Team을 한번 더 조회한다. 왜? Lazy를 안해줬기때문.
ManyToOne OneToOne은 꼭 Lazy설정을 해주도록하자.
@Entity
public class Member {
@Id @GeneratedValue
private Long id;
private String username;
private int age;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "TEAM_ID")
private Team team;
조인대상 필터링
- 예) 회원과 팀을 조인하면서, 팀 이름이 A인 팀만 조인
JPQL:
SELECT m, t FROM Member m LEFT JOIN m.team t on t.name = 'A'
SQL:
SELECT m., t. FROM
Member m LEFT JOIN Team t ON m.TEAM_ID=t.id and t.name='A'
연관관계 없는 엔티티 외부조인
- 예) 회원의 이름과 팀의 이름이 같은 대상 외부 조인
JPQL:
SELECT m, t FROM
Member m LEFT JOIN Team t on m.username = t.name
SQL:
SELECT m., t. FROM
Member m LEFT JOIN Team t ON m.username = t.name
'Dev > JPA' 카테고리의 다른 글
[JPA] - 다양한 연관관계 매핑 (0) | 2024.09.23 |
---|---|
[JPA] - 연관관계 매핑 기초 (0) | 2024.09.23 |
[JPA] - 페이징 API (0) | 2024.09.23 |
[JPA] - JPQL (1) | 2024.09.23 |
[JPA] - 값타입 컬렉션 (0) | 2024.09.22 |
@wnseo :: wnseo
wnseo 개발
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!