1

休止状態の基準クエリを使用して、コレクションの一部のみを取得したいと考えています。例として、複数の Student オブジェクトを含む Class オブジェクトがあるとします。クラスのリストを取得したいのですが、データベース クエリを 1 回だけ使用して、ドイツの学生だけを学生コレクションにフェッチする必要があります (残りは必要なく、大きなオーバーヘッドになります)。

hibernate のそれ以降のバージョン (3.6.4 より前だと思います) では、次のようにフィルター処理された createCriteria を使用してこれを行うことができます。

criteria.createCriteria("students", "studentscollection", Criteria.LEFT_JOIN,
     Restrictions.eq("studentscollection.country", "DE"));

問題は、hibernate の現在のバージョンでは、これによりコレクションが初期化されないままになり、大規模なデータベース クエリがトリガーされて、アクセス時にすべての単一コレクションのコレクション全体が読み込まれることです。これは、1 回ではなく数百回のクエリを引き起こす大きなパフォーマンスの問題です。

現在の休止状態のバージョンで、1 つのクエリを使用してこれを行うための解決策はありますか?

4

1 に答える 1

0

下位バージョンの hibernate を使用することを検討してください。最近、私のチームでも同様のジレンマがありました。私が覚えている限りでは、バージョン 4.0.1 final で同様の構造を使用しましたが、複数のクエリや効率性に関する問題は覚えていません。しかし、バージョン 3.6.4 の動作が変更される可能性があることは正しいです ( https://hibernate.onjira.com/browse/HHH-2049?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ) 。これに対する答えが見つかったら、ここでお知らせください。

ご挨拶、

ルカシュ

于 2012-08-17T08:49:37.000 に答える