2009-03-24 13 views
1

私は古い「古典的なASP」アプリケーションをJ2EE/Hibernateに移行しようとしています。私はHQLにこのような何かを表現するにはどうすればよいハイバーネーションのグループ化

SELECT parent.id, parent.name, parent.column1, count(child.id) AS no_of_children 
FROM parent 
INNER JOIN child ON child.parent_id = parent.id 
GROUP BY parent.id, parent.name, parent.column1 

: 私はSQL文の次のタイプに問題がありますか?私は子供をコレクションとして(many-to-oneを使って)マップし、コレクションのサイズから子の数を取得しようとしましたが、Hibernateは各親に対して個別にすべての "子"エンティティをロードしなければなりません。

この結果、1ではなく約1000個のDBクエリが実行され、すべてのパフォーマンス上の問題が発生します。

これを回避する手段はありますか?親エンティティであるHQL

FROM Parent GROUP BY Parent.id, Parent.name, Parent.column1 

答えて

0

翻訳は、以前にモデル化。結合節はモデルで定義されます。

子の数を取得する場合は、各親に対して別々に、子モデルのLobフィールドを削除して、アプリケーションの速度にボトルネックとなるようにしてください。

希望

1

を助けたのは、私は、次のような何かをしようとするだろう:

select parent.id, parent.name, parent.column1, count(child) 
from Parent parent 
join parent.Children as child 
group by parent.id, parent.name, parent.column1 
+0

私は完全にわからないんだけど、私は参加すると思う/として明示的に書くべきでした:「左の参加フェッチparent.Children "を呼び出すと、Hibernateにjoinを介してコレクションをプリロードするよう指示します。 – LorenzCK