[JPA] JPQL 조인

내부조인

  • 연관 엔티티 중 겹치는 부분만 결과로 들고온다
  • INNERT JOIN 키워드를 사용
    • JOIN 만 써도 된다.
@Autowired
    private EntityManager em;
    @BeforeEach
    void setUp() {
        // 팀만들어주기
        Team team = new Team();
        team.setName("팀A");
        em.persist(team);
        
        // 멤버 50개 만들어주기
        for (int i = 0; i < 50; i++) {
            Member member = new Member();
            member.setName("ipeac" + i);
            member.setAge(i);
            
            if (i % 2 == 0) {
                member.setTeam(team);
            }
            
            em.persist(member);
        }
    }
    
    @Test
    void testInnerJoin() {
        String teamName = "팀A";
        String jpql = "select m from Member m inner join m.team t where t.name = :teamName";
        List<Member> resultList = em.createQuery(jpql, Member.class)
                                    .setParameter("teamName", teamName)
                                    .getResultList();
        System.out.println("resultList = " + resultList);
    }
select m1_0.id,m1_0.city,m1_0.street,m1_0.zipcode,m1_0.age,m1_0.name,m1_0.team_id 
from member m1_0 
join team t1_0 on t1_0.id=m1_0.team_id
 where t1_0.name='팀A';
resultList = [Member(id=1, name=ipeac0, team=com.example.springboot3.test.Team@4b475742, age=0, address=null, favoriteFoods=[], addressHistory=[]), Member(id=3, name=ipeac2, team=com.example.springboot3.test.Team@4b475742, age=2, address=null, favoriteFoods=[], addressHistory=[]), Member(id=5, name=ipeac4, team=com.example.springboot3.test.Team@4b475742, age=4, address=null, favoriteFoods=[], addressHistory...........

다중 엔티티 조회 (내부 조인)

  • 내부 조인은 각 엔티티를 배열의 형태로 반환한다.
  • TypedQuery는 당연 사용 X
  • QueryObject[] 를 활용해야 한다.
String jpql = "SELECT m, t FROM Member m JOIN m.team t";
List<Object[]> result = em.createQuery(jpql).getResultList();
for (Object[] row : result) {
    Member member = (Member) row[0];
    Team team = (Team) row[1];
    // ... 후속 처리
}

Uploaded by N2T

'자바 > JPA' 카테고리의 다른 글

[JPA] 페이징 API  (0) 2023.11.09
[JPA] 집합 함수  (0) 2023.11.09
[JPA] 페치 조인  (0) 2023.11.09
[JPA] 컬렉션 페치 조인  (0) 2023.11.09
[JPA] 페치 조인과 일반 조인의 차이점  (0) 2023.11.09