5

私がEclipseLinkで気に入っている点の 1 つは、バッチ クエリ ヒントと呼ばれる優れた機能です。これに相当する Hibernate はまだ見つかっていません。

基本的に、大量の結合を行うとすぐに面倒になり、必要以上に多くのデータを照会することになります (person を 6 つのアドレスに結合すると、person 情報が 6 回返されることに注意してください。これを追加の結合で乗算し続けます)。 .

Address、Email、Phone、および OrderHistory の 0:M コレクションを持つ Person エンティティを想像してください。すべてを結合するのは良くありませんが、バッチメソッドを使用します:

List persons = entityManager.createQuery("select p from Person p"
  .setHint(QueryHints.BATCH, "p.address")
  .setHint(QueryHints.BATCH, "p.email")
  .setHint(QueryHints.BATCH, "p.phone")
  .setHint(QueryHints.BATCH, "p.orderHistory")
  .getResultList();

これにより、Person テーブルに対してクエリが実行され、それだけです。住所レコードに最初にアクセスすると、住所テーブル全体に対して単一のクエリが実行されます。Person テーブルで where 句を指定した場合、これと同じ基準が Address ロードにも使用されます。

したがって、1 つのクエリを実行する代わりに、5 つのクエリを実行します。

結合を使用してそれを行っていた場合、1 つのクエリですべてを取得できますが、結合のためにさらに多くのデータをロードする可能性があります

とにかく、これに相当するものをHibernateのドキュメントで探しましたが、見当たりません。ありますか?

4

2 に答える 2

5

ありません。

于 2009-01-26T08:14:25.520 に答える
0

私が知っていることが役立つ可能性があることが2つあります。

1)hibernate.default_batch_fetch_size

2) Criteria.setFetchMode と Criteria.setFetchSize

于 2009-01-22T00:43:12.807 に答える