hibernate/JPA @ManyToOne - FetchType.EAGERで賢くフェッチされるフィールドを指定する方法はありますか?以下のようなHibernate:Eagerは指定されたフィールドのみをフェッチします
何か:
@ManyToOne(fetch=FetchType.EAGER, eagerFields={"id","name"})
private Company company;
hibernate/JPA @ManyToOne - FetchType.EAGERで賢くフェッチされるフィールドを指定する方法はありますか?以下のようなHibernate:Eagerは指定されたフィールドのみをフェッチします
何か:
@ManyToOne(fetch=FetchType.EAGER, eagerFields={"id","name"})
private Company company;
JPA 2.0仕様では、(section 11.1.26 of the JPA 2.0 specificationを参照)を使用すると、以下のように@ManyToOne
注釈が定義されている通り達成しようとしている可能性について定義していません:
public @interface ManyToOne {
Class targetEntity() default void.class;
CascadeType[] cascade() default {};
FetchType fetch() default EAGER;
boolean optional() default true;
}
とは何のことができます。あなたが遅れてロードしたいCompany
エンティティのフィールドに@Basic(fetch = FetchType.LAZY)
を指定した場合は、選択したフィールドだけの読み込みを実現することができます。 しかし、それは以下の抜粋が示すようにプロバイダ実装の慈悲に依存するため、関連分野以外の分野のために奨励されていません:
EAGER戦略は、データがなければなりません持続性プロバイダの実行時に必要条件であります熱心に を取得しました。 LAZY戦略は、データが最初にアクセスされたときに遅れて を取得しなければならないという永続性プロバイダのランタイムへのヒントです。実装では、 LAZY戦略のヒントが指定されているデータを熱心に取得できます。特に、遅延ベースのフェッチは、プロパティベースのアクセスが使用されるBasic マッピングでのみ使用可能になる場合があります。
いいえ、熱心な検索のために 'FETCH'を使用するクエリを書くことができるので、通常は' EAGER'を設定してはいけませんが、遅延読み込みを使用するように書くことはできません。 – Kayaman