JPQL Left Join - фильтрует правые строки, возвращая все левые строки - PullRequest
0 голосов
/ 07 октября 2011

У меня есть две сущности, которые связаны следующим образом.

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.

Спасибо!

1 Ответ

0 голосов
/ 28 августа 2012

Это в корне неверный подход.Отображения JPA касаются определения модели данных, а не определения структуры конкретного результата запроса.Это означает, что у пользователя должны быть загружены все (в случае энергичной выборки) элементы flightBookingCollection, возвращаемые в результате запроса, а не только некоторые из них.

Если есть необходимость в результатах другого типа, выделитеОбъект для представления результата должен быть создан с помощью соответствующего конструктора и создан с помощью конструкции SELECT NEW.Примеры можно найти в этом вопросе.

...