2016-12-15 11 views
0

を親を取得:JPAだけ私はこのような親を持っていない子供、

@Entity 
@Table(name="parent") 
public class Parent { 

    private List<Child> childs; 
    private List<AnotherChild> anotherChilds; 

    @OneToMany(mappedBy = "parent", fetch = FetchType.LAZY) 
    public List<Child> getChilds() { 
     return childs; 
    } 

    @OneToMany(mappedBy = "parent", fetch = FetchType.LAZY) 
    public List<AnotherChild> getAntoherChilds() { 
     return anotherChilds; 
    } 

    //Getters and Setters ommited 
} 

そして、私はすべての親を取得します名前付きクエリを持っているこの

@Entity 
@Table(name="child") 
public class Child { 

    private Parent parent; 

    @ManyToOne 
    @JoinColumn(name = "column_name") 
    public Parent getParent() { 
     return patern; 
    } 
} 

@Entity 
@Table(name="another_child") 
public class AnotherChild { 

    private Parent parent; 

    @ManyToOne 
    @JoinColumn(name = "column_name") 
    public Parent getParent() { 
     return patern; 
    } 
} 

のような2人の子供が、このすべての子供たちもロードしていますか?どのように私は自動的に読み込むために子供たちを停止することができますか?

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

+0

親をフェッチするクエリを投稿してください。 –

+0

@AbdullahWasiこれは単なる標準のfindAllクエリであり、名前付きクエリとしてフォームJAX-RSと呼ばれています – iqueqiorio

+0

遅延読み込みがデフォルトですので、ロードされている場合は、それが実行中のコードです。コード。 –

答えて

0

遅延ロードは、オブジェクトの初期化を必要な時点まで延期するためにコンピュータプログラミングで一般的に使用されるデザインパターンです。適切かつ適切に使用されれば、プログラムの運用の効率化に貢献できます。レイジーローディングの反対はeager loadingです。さらに移動する前にHibernate

で遅延ロードを有効にする方法

、マッピング対注釈を休止状態使用した場合の遅延ロードのデフォルト動作 をおさらいすることが重要です。 デフォルトの動作では、 'プロパティ値を熱心に'ロードし、 'コレクションを遅延させる'ことがあります。 は、すべての参照がコレクションを含めて (デフォルトを含む)が熱心に読み込まれている前に、プレーンなHibernate 2(マッピングファイル)を使用していた場合に覚えていることとは異なります。 @OneToManyと@ManyToManyの関連付けは、デフォルトでLAZYの読み込みになります。 と@OneToOneと@ManyToOneは、デフォルトでEAGERの読み込みが行われます。これは将来的にどんな落とし穴も避けることを覚えておくことが重要です です。怠惰 を明示的に読み込むには、 アノテーションを使用しているときに遅延ロードしたい アソシエーションで "fetch = FetchType.LAZY"を使用する必要があります。使用例は次のようになります。@OneToMany( mappedBy = "category"、fetch = FetchType.LAZY)プライベートセット製品。 "FetchType.LAZY"と平行する別の属性は、 "FetchType.EAGER" です。これはLAZYとは正反対です。つまり、所有者エンティティが最初にフェッチされるときにアソシエーションエンティティを としてロードします。遅延ロードの動作方法 のHibernate Hibernateが遅延ロード の動作をエンティティとアソシエーションに適用する最も簡単な方法は、プロキシーの を実装することです。 Hibernateは、エンティティのクラスから派生したプロキシを で置き換えることによってエンティティへの呼び出しを傍受します。 要求された情報がない場合、制御は親エンティティの実装に引き継がれる前にデータベース からロードされます。 アソシエーションがコレクションクラスとして表されるとき、 ラッパー(それに含まれるエンティティの ではなく、本質的にコレクションのプロキシ)が作成され、元のコレクション の代わりになります。このコレクションのプロキシにアクセスすると、返されたプロキシコレクション内に何が得られるか はプロキシエンティティではありません。 ではなく、実際のエンティティです。実行時にはそれほど重要でないため、このコンセプトを理解することに多くのプレッシャーをかける必要はありません( )。

関連する問題