【问题标题】:JPQL Left Join - Filter right rows while returning all left rowsJPQL Left Join - 在返回所有左行的同时过滤右行
【发布时间】:2011-12-03 01:14:10
【问题描述】:

我有两个这样相关的实体。

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

但这只会返回至少有一个状态为 1 的航班预订的用户。

谢谢!

【问题讨论】:

    标签: join left-join jpql


    【解决方案1】:

    这是根本错误的方法。 JPA 映射是关于定义数据模型,而不是关于定义特定查询结果的结构。这意味着当查询返回时,用户应该加载所有(在急切的情况下)飞行BookingCollection 元素,而不仅仅是其中的一部分。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-16
      • 1970-01-01
      • 2014-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多