web-dev-qa-db-fra.com

Rejoignez sans association dans HQL

Disons que j'ai deux tables (A, B) comme:

A {id, a, c}
B {id, b, c}

J'ai aussi leurs entités. Je veux écrire un HQL pour que l'ensemble de résultats soit comme (où A.c = B.c):

(a1, b1, c1)
(a2, b2, c2)
(a3, b3, c3)
...

Étant donné que les clauses on ne sont pas prises en charge par hibernate, je suis bloqué et je ne sais pas comment écrire la requête.

38
nimcap

Vous devez utiliser la notation de jointure croisée:

from A as table_a , B as table_b
where table_a.c = table_b.c

Bien sûr, il n'y a aucun moyen d'implémenter les jointures externes de cette manière, vous pourriez donc avoir des problèmes si tel est votre cas.

Pour le cas analogue avec des critères, reportez-vous à: hibernate-criteria-joining-table-without-a-mapped-association

49
Il-Bhima

si vous voulez faire une jointure externe, vous pouvez faire une sous-requête et gérer OR opération (cela fonctionne pour moi). cela rend la requête plus complexe et moins performante mais fonctionne :-)

2
user2291385

si les deux tables sont liées l'une à l'autre via une clé étrangère, vous pouvez essayer ceci:

laisser:

A {id (clé primaire), a, c} B {id (clé étrangère), b, c}

définir une variable de type parent (A) avec setter et getter dans pojo de la classe B. après quoi vous pouvez écrire la requête de cette façon. laissez-le 'AA'

select tbl_b.a,tbl_a.a,tbl_b.b,tbl_a.b,tbl_b.c,tbl_a.c from B tbl_b inner join tbl_b.AA tbl_b
0
Noman Akhtar