¿Puedo realizar una unión externa en una variable usando EclipseLink?

Tengo dos tablas T1 y T2 y quiero lograr algo como esto:

Select * from t1 left outer join t2 on (t1.id = t2.id and t2.x = :val) where t2.x is null or t2.x = :val

Tengo entidades para T1 y T2.

En T1:

 @OneToOne(fetch = FetchType.LAZY)
 @JoinColumn(name = "ID", insertable = false, updatable = false)
 protected T2 t2;

Intenté la siguiente consulta JPA:

SELECT t1 FROM T1 LEFT JOIN t.t1 t2 WHERE t2.x IS NULL OR t2.x = :val

pero no me da lo que quiero. El problema es que cuando tengo un registro coincidente en T2 para una identificación determinada, recibo el resultado solo para un valor T2.X. Necesito resultado para todos los valores, incluso si es nulo.

El SQL generado es similar a:

SELECT * FROM T1 t1 LEFT OUTER JOIN T2 t2 ON (t2.ID = t1.ID) WHERE ((t2.X IS NULL) OR (t2.X = ?))

¿Por qué necesito esto? Tengo información detallada en T1 y la misma información puede estar disponible en T2. La información en T2 es con preferencia. Si los datos no están disponibles en T2, solo uso el predeterminado en T1.

Puede ser que esté mirando en la dirección equivocada. Así que cualquier idea para resolver esto es bienvenida.

¡Gracias!

preguntado el 12 de junio de 12 a las 16:06

1 Respuestas

EclipseLink agregó compatibilidad con la cláusula ON en 2.4,

http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Basic_JPA_Development/Querying/JPQL#ON

Respondido el 13 de junio de 12 a las 15:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.