2011-10-07 1 views
0

저는 이와 같이 관련된 두 엔티티가 있습니다.JPQL 왼쪽으로 조인 - 모든 왼쪽 행을 반환하는 동안 오른쪽 행을 필터링하십시오.

SELECT u FROM User u LEFT JOIN u.flightBookingCollection AS fb WHERE fb.status = 1 

을하지만은 적어도이있는 사용자를 반환

public class User { 
    @Column(name = "ID") 
    private Integer id; 
    @OneToMany(mappedBy = "customerUserId") 
    private Collection<FlightBooking> flightBookingCollection; 
} 
public class FlightBooking { 
    @Column(name = "ID") 
    private Integer id; 
    @Column(name = "STATUS") 
    private Integer status; 
    @JoinColumn(name = "CUSTOMER_USER_ID", referencedColumnName = "ID") 
    @ManyToOne 
    private User customerUserId; 
} 

가 나는 상태가 모든 사용자 만의 항공편 = 1

지금까지 내가 가진를 반환하는 wan't 하나의 비행 예약 1의 상태.

감사!

답변

0

근본적으로 잘못된 접근입니다. JPA 매핑은 특정 쿼리 결과의 구조를 정의하는 것이 아니라 데이터 모델을 정의하는 것과 관련이 있습니다. 즉, 사용자는 일부만이 아니고 쿼리 결과로 반환 될 때 flightBookingCollection의 모든 요소 (eager fetching의 경우)가로드되어야 함을 의미합니다.

다른 결과가 필요한 경우 현재 결과에 대한 전용 객체를 적절한 생성자를 사용하여 만들고 SELECT NEW 구문을 사용하여 만들어야합니다. 예는 this 질문에서 찾을 수 있습니다.

관련 문제