2012-01-05 7 views
1

エンティティのコレクションをフェッチしてそのサイズを取得する可能性はありますか?以下のようなJPAサイズ取得のためのHibernateフェッチコレクション

何か:

FROM Cat c JOIN SIZE c.kittens 

だから私は次のようにクエリの結果を使用することができます。

int sum = 0; 

for(Cat c : em.createQuery("..", Cat.class).getResultList()) 
    sum += c.getKittens().size(); 

サイズのみを取得する任意のキーワードや他の可能性があります。

その目的のためにコレクション全体をフェッチするのは大きな問題ではありませんが、パフォーマンスの向上を考えていて、これがどのように実行できるのか自分に尋ねましたか?

答えて

2
あなたは(子猫テーブル内のすべての行)

select count(*) from Kittens k 

を一度にすべての猫のために、単一の猫

select count(*) from Kittens k where k.cat = :cat 

ためJPQL でSQL集計関数を使用して

Long size = (Long) query.getSingleResult(); 
としてそれを取得することができます

+0

'COUNT'は合計ではなく、' SUM'を使って望みの結果を与えますループ。 – DrColossos

+1

@DrColossos - OPは合計ではなく数を探しています。 – Perception

+0

私はSUMは、アカウントテーブルの合計金額を得るのと同じように算術加算(3 + 8)のためだと思います。 'COUNT'はテーブル内の行数です。 – viktor