/ / JPQL Left Join - Filtra las filas de la derecha mientras devuelve todas las filas de la izquierda - join, left-join, jpql

JPQL Left Join: filtre las filas derechas mientras devuelve todas las filas izquierdas: join, left-join, jpql

Tengo dos entidades que están relacionadas así.

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

Quiero devolver todos los usuarios, pero solo los vuelos que tienen un estado = 1.

Hasta ahora tengo:

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

Pero eso solo devuelve usuarios que tienen al menos un flightBooking con estado de 1.

¡Gracias!

Respuestas

0 para la respuesta № 1

Ese es un enfoque fundamentalmente incorrecto. Las asignaciones de JPA se tratan de definir el modelo de datos, no de definir la estructura del resultado de una consulta específica. Esto significa que el Usuario debe tener todos (en el caso de una búsqueda ansiosa) los elementos de flightBookingCollection cargados cuando se devuelvan como resultado de la consulta, no solo algunos de ellos.

Si hay necesidad de otro tipo de resultados, el objeto dedicado al resultado presente debe crearse con el constructor apropiado y crearse con la construcción SELECT NEW. Se pueden encontrar ejemplos en esta pregunta.