3

HQL と s を使用してクエリを作成しようとしていますが、うまくいきOUTER JOINません。次のマッピングを検討してください

<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>

ここで、すべての親とその親の子の数のリストを取得したいと思います。2 人の子を持つ 1 つの親と、まったく子を持たない 1 つの親があるとします。次のような出力が期待されます。

+-------------------+
| parent | children |
+--------+----------+
|  1     | 2        |
|  2     | 0        |
+--------+----------+

プレーン SQL を使用してもまったく問題ありません。次のような出力を取得します。

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;

ただし、 を使用する場合、親から子へのパスが必要なため、HQL を使用することはできないようですOUTER JOIN。これは明らかに持っていません (また、追加したくない)。

HQLを使用してクエリを機能させる方法はありますか、それとも本当に-信じられませんでした-休止状態の機能がありませんか?

4

1 に答える 1

3

クエリを切り替えると役立つはずです

SELECT p.id as parent, count(c.id) as children from children c right outer join c.parent p group by p.id;
于 2009-12-03T15:48:46.987 に答える