私が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のドキュメントで探しましたが、見当たりません。ありますか?