Utilizzando outer join nelle query HQL
-
12-09-2019 - |
Domanda
Sto cercando di costruire una query utilizzando HQL e OUTER JOIN
s e proprio non riesco a farlo funzionare. Si consideri il seguente mappatura
<class name="Parent">
<id name="id" type="integer">
<generator class="native" />
</id>
</class>
<class name="Child">
<id name="id" type="integer">
<generator class="native" />
</id>
<many-to-one name="parent"/>
</class>
Ora mi "piacerebbe ottenere un elenco di tutti i genitori e la quantità di bambini con i genitori. Supponiamo che io ho Genitore unico con due figli e genitore uno con a tutti i figli. Mi aspetto un output come
+-------------------+
| parent | children |
+--------+----------+
| 1 | 2 |
| 2 | 0 |
+--------+----------+
utilizzando SQL pianura non è un problema a tutti, vado a prendere questa uscita facendo qualcosa di simile
SELECT p.id as parent, count(c.id) as children from parents p LEFT OUTER JOIN children c on c.parent_id = p.id group by p.id;
Tuttavia non sembra essere possibile utilizzando HQL come uno ha bisogno di un path dal genitore al bambino quando si utilizza un OUTER JOIN
, che io ovviamente non ho (e anche non voglio aggiungi).
Tutte le idee come ottenere la query di lavoro utilizzando HQL o è davvero - non ci potevo credere -? Una funzionalità di sospensione mancante
Soluzione
Switching la query dovrebbe aiutare
SELECT p.id as parent, count(c.id) as children from children c right outer join c.parent p group by p.id;