Domanda

Sto cercando di costruire una query utilizzando HQL e OUTER JOINs 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

È stato utile?

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;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top