본문 바로가기

Java

[JPA] 중급 JPQL

반응형

경로 표현식 : 점을 찍어 객체 그래프를 탐색

상태 필드(state field): 경로 탐색의 끝, 탐색X
단일 값 연관 경로: 묵시적 내부 조인(inner join) 발생, 탐색O -> 굉장히 위험하며 리팩토링하기 어려움

컬렉션 값 연관 경로: 묵시적 내부 조인 발생, 탐색X

FROM 절에서 명시적 조인을 통해 별칭을 얻으면 별칭을 통 해 탐색 가능

            String jpql = "select t from Team t join fetch t.members where t.name = '팀A'";
            List<Team> teams = em.createQuery(jpql, Team.class).getResultList();
            for(Team team : teams) {
                System.out.println("teamname = " + team.getName() + ", team = " + team); 
                for (Member member : team.getMembers()) {
                    //페치 조인으로 팀과 회원을 함께 조회해서 지연 로딩 발생 안함
                    System.out.println("-> username = " + member.getUsername()+ ", member = " + member); }
                }

페치 조인과 일반 조인의 차이

JPQL은 결과를 반환할 때 연관관계 고려X
단지 Select 절에 지정하 ㄴ엔티티만 조회한다. 
여기서는 팀 엔티티만 조회하고, 회원 엔티티는 조회X
페치 조인을 사용할때만 연관된 엔티티도 함꼐 조회( 즉시로딩 ) -> N+1문제 발생
페치조인은 객체[ 그래프를 SQL 로 한번에 조회하는 개념

반응형

'Java' 카테고리의 다른 글

[Spring] Entity를 DTO로 감싸라  (0) 2022.06.15
[JPA]JPQL  (0) 2022.05.11
[JPA] 값타입  (0) 2022.05.03
[JPA] 상속관계 매핑  (1) 2022.04.10
[JPA] Proxy, 즉시로딩, 지연로딩  (0) 2022.04.01