2017-03-08 15 views
1

JPA + Hibernateを使用しています。 私は、遅延ロードされた多対1のマッピングをいくつか持っています。JPA + Hibernate強制JPAはレイジーローディングでプロキシを使用しない

サービスでは、getterメソッドを呼び出すことによって多対1オブジェクトを初期化します。プロキシは親VOに割り当てられ、実際のVOオブジェクトには割り当てられません。

私の質問は、プロキシ戦略を使用しないようJPAに指示する方法はありますか。 ここでの制限は、@LazytoOneなどのHibernateオブジェクトやannotaionsを使用できないことです。

ありがとうございました。

答えて

2

Hibernateが何らかの形でそれが怠惰な関係であることを保証しなければならないという事実のために、Hibernateがそこでプロキシオブジェクトを使用するのを防ぐことはできません。

  1. トリガ初期化Hibernate.initialize(parent.getChild())

    あなたが複数の選択肢を持っています。これは、これを実行する最善の方法ではないことに注意してください。また、アクティブなトランザクションが必要です。

  2. エンティティ自体をフェッチするときにリレーションを取得します。これは結合をフェッチすることで行うことができます。 JPQL/HQL/Criteria APIがこれを行うことができます。
  3. 必要なデータのみを含む読み取り専用投影を使用します。このような場合には、Spring Data JPAを使用することができます。

これは、これを行う最も効果的な方法であるため、オプション2または3を使用することをお勧めします。

遅延読み込みの詳細については、hereを参照してください。