ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JPA] 경로표현식(묵시적 내부조인과 명시적 내부조인)
    JPA 2020. 4. 3. 02:38
    반응형

    경로표현식


    ' . ' 을 찍어서 객체 그래프를 탐색 하는것

     

    상태필드

    • 단순히 값을 저장하기 위한 필드(ex. username)
    • 경로 탐색의 끝. 더 이상의 탐색할 것이 없음
    String query = "select m.username from Member12 m";
    List<String> resultList = em.createQuery(query, String.class).getResultList();

    JPQL을 통해 데이터베이스로 날라간 실제 SQL을 보면 상태필드 조회는 기존의 JPQL과 같음을 확인할 수 있다.

     

     

    연관필드

    • 단일값 연관필드 : @ManyToOne, @OneToOne 대상이 엔티티일 경우
      • 묵시적 내부조인 발생
      • 추가 탐색 가능(ex. m.team.name)
    • 컬렉션 값 연관필드 : @OneToMany, @ManyToMany 대상이 컬렉션일 경우
      • 묵시적 내부조인 발생
      • 추가 탐색 불가능(컬렉션 리스트 중에서 특정 하나만 가져오지 못한다는 것을 생각하자. 기껏해야 size 정도만 가져올 수 있다.)
      • 단, 명시적인 조인을 사용하면 컬렉션 값 연관필드 추가 탐색이 가능하다.
        • select m from Team t join t.members m
        • FROM 절에서 명시적 조인을 통해 별칭을 얻으면 별칭을 통해 탐색 가능 

     

    String query = "select m.team from Member12 m";
    List<Team12> resultList = em.createQuery(query, Team12.class).getResultList();

    JPQL을 통해 연관필드를 조회하면 실제 SQL에서는 내부적으로 연관 테이블을 조인한다. 묵시적 내부조인이 발생한 것을 확인할 수 있다. (묵시적 내부조인은 쿼리를 성능 튜닝하기 굉장히 까다롭기 때문에 실무에서는 사용을 자제해야 한다고 한다.)

     

    실무에서는 묵시적 내부조인을 쓰지말고 명시적 내부조인을 사용하는 것이 바람직하다.

    반응형

    'JPA' 카테고리의 다른 글

    [JPA] 페치조인(fetch join)이란?  (0) 2020.04.03
    [JPA] JPA 쿼리 지원 방식(JPQL)  (0) 2020.03.30
    [JPA] 데이터 타입 분류 (Embedded)  (0) 2020.03.29
    [JPA] 상속관계 매핑 전략();  (1) 2020.03.27
    [JPA] JPA 특징 정리  (0) 2020.03.24

    댓글

Designed by Tistory.