2010-11-19 5 views
4

クラスAは、Bと1対多の関係にあります。したがって、Aの属性はcollectionOfBです。JPA:コレクションサイズをcountを使用して属性に直接マッピングしますか?

Aの「アトリビュートB」をマップする方法はありますか?

目的は、コレクション全体をロードせずに、関連するBの数を取得するためのショートカットを提供することです。ときには、必要なのはカウント、つまりコレクションのサイズです。私は正確にそれを行うエンティティマネージャに対してクエリを発行することができることを知っています。しかし、アノテーションのおかげでJPAプロバイダがそれを見ることは、もちろん望ましいことです。

+1

私はそれを行うにはどのような方法を知りません。あなたは単にCOUNTクエリを書く必要があります。 –

+0

JPAをあきらめることができれば、Hibernateの公式(http://docs.jboss.org/hibernate/core/3.5/reference/en/html/mapping.html#mapping-column)を使ってこれが可能であるかもしれないことに気付きましたコンプライアンス。 –

答えて

0

私が知る限り、これは不可能です。 すでに提案しているように、これを達成するためにクエリを実行します。これは、数十万のBオブジェクトがあり、それをキャッシュしてx分ごとに更新することができない限り高価ではありません。

エラーが発生しやすいソリューションは、これらの種類の数値を持つ統計エンティティを持つことです。

+0

私がクエリを書く際に問題となるのは、エンティティの使用方法です。 Dozerを使用して、それらをそれぞれのDTOに自動的にマップします(プレゼンテーションレイヤーに戻されます)。 –

+0

したがって、ADtoにフィールドnumberOfBsがある場合、DozerはA#getNumberOfBs()を呼び出します。通常、AのJPAアノテーションに応じて、データはAにまだ存在しない場合は自動的にデータストアからロードされます。 ADtoやASummaryDtoのような分割されたDTOを頻繁に使用していたため、DTOはBsのコレクションを必要とし、時にはnumberOfBのみを必要とすることがありました。私はこれを理解できる方法で説明することができたと思っています。 –

関連する問題