Skip to content

경로표현식

자바에서 인스턴스화된 객체로 클래스의 변수나 메서드에 접근할 때 .을 이용해 접근하는 것 처럼, jpql 쿼리에서 .으로 객체의 값에 점을 찍어 객체 그래프를 탐색하는 것을 경로 표현식이라고 한다.

경로 유형별 동작

상태 필드(State Field)

상태 필드는 일반적인 값을 저장하기 위한 필드이다. 즉, int, varchar등의 자료형을 가지는 기본적인 데이터를 저장한다. 상태필드는 더 나아갈 경로가 존재하지 않으므로 jpql에서 부가적인 조인 등의 탐색 또한 일어나지 않는다.

연관 필드(Association field)

연관 필드는 연관관계가 맺어진 외래 테이블의 값을 위한 필드이다. 단일 값 연관 필드와 컬렉션 값 연관 필드로 나뉜다.

  • 단일 값 연관 필드

    @ManyToOne, @OneToOne처럼 엔티티를 대상으로 하는 필드이다.

    jpql에서 단일 값 연관 필드를 경로로 표현하여 조회하게 되면, 묵시적 내부 조인이 실행된다. 즉, 조인 쿼리를 직접 쓰지 않더라도, 단일 값 연관 필드를 조회하면 조인 쿼리가 날아간다. 조인한 엔티티에서 다른 필드를 더 탐색할 수도 있다.

  • 컬렉션 값 연관 필드

    @OneToMany, @ManyToMany처럼 엔티티들의 컬렉션을 대상으로 하는 필드이다. 단일 값 연관 필드와 마찬가지로 묵시적 내부 조인이 발생하지만, 엔티티의 정보를 더 탐색하는 것은 불가능하다.

    하지만 FROM 절에서 명시적 조인을 통해 별칭을 얻어 별칭을 통해 탐색하는 것은 가능하다.