2014-09-18 2 views
0

J'ai une clause where qui a une condition comme suit:Oracle ainsi que la notation de signe hibernat rejoindre

a.system(+) = 'Test' 

Je tente de le convertir en veille prolongée à l'aide rejoindre

left join a where a.system = 'Test' or a.system = null 

mais cette transformation ne renvoie des données quand a.system = 'Test' ou a.system = null qui n'est plus une jointure externe.

Y a-t-il une solution correcte à cela?

Répondre

0

avec la jointure à gauche, il suffit de mettre les conditions de jointure. Dans l'exemple ci-dessous, vous obtiendrez toutes les lignes de la table a avec les champs correspondants de la table b, et null s'il n'y a pas de ligne correspondante dans b.

select * 
from a left join b on a.field = b.field and b.system = 'Test' 

il sera plus clair si vous postez une requête complète.

+0

je comprends. mais pour utiliser JPA, toutes les relations doivent être définies dans la classe @Table. Puisque c'est une jointure à une constante, je suis confus comment cela devrait être fait. – Joseph

+0

est system = 'Test' la seule condition? veuillez publier la structure des tableaux et une requête complète, ou expliquer quel résultat vous attendez. – 1010

+0

cela semble être votre cas [link] (http://stackoverflow.com/questions/10202456/how-to-create-a-jpa-query-with-left-outer-join) – 1010

0

Pour expliquer plus loin, vous toujours join two tables ou un result set ou une «vue» qui agit comme une table. Vous avez 'TEST' comme une constante ici. Votre requête équivalente à la norme ANSI ressemblerait à ceci:

FROM table_a a LEFT JOIN table_b b ON a.column = b.column AND b.system = 'TEST'

Questions connexes