JPQL左连接 - 在返回所有左行时过滤右行

时间:2011-10-07 14:00:07

标签: join left-join 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;
}

我不想归还所有用户,只返回状态为1的航班。

到目前为止,我有:

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

但是只返回至少有一个flightBooking且状态为1的用户。

谢谢!

1 个答案:

答案 0 :(得分:0)

这是根本错误的做法。 JPA映射是关于定义数据模型,而不是定义特定查询结果的结构。这意味着当查询结果返回时,User应该拥有所有(在急切提取的情况下)加载的flightBookingCollection元素,而不仅仅是其中一些。

如果需要其他类型的结果,必须使用适当的构造函数创建专用对象以呈现结果,并使用SELECT NEW构造创建。可以在this问题中找到示例。