2011-10-07 63 views
0

我有兩個像這樣相關的實體。JPQL左連接 - 在返回所有左行時過濾右列

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; 
} 

我wan't去返回一個狀態的所有用戶,但僅飛行= 1

到目前爲止,我有:

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

但是,只返回至少有用戶一個flightBooking狀態爲1.

謝謝!

回答

0

這是從根本上錯誤的方法。 JPA映射關於定義數據模型,而不是定義特定查詢結果的結構。這意味着用戶應該在查詢返回時加載flightBookingCollection的所有元素(在提前獲取的情況下),而不僅僅是其中的一部分。

如果需要其他類型的結果,則必須使用適當的構造函數創建專用對象以呈現結果,並使用SELECT NEW構造創建。示例可以從this問題中找到。