ホームページ > Java > &#&チュートリアル > Hibernate MultipleBagFetchException: SessionFactory 作成中の Eager Fetching の問題を解決するには?

Hibernate MultipleBagFetchException: SessionFactory 作成中の Eager Fetching の問題を解決するには?

Mary-Kate Olsen
リリース: 2024-12-12 13:46:10
オリジナル
708 人が閲覧しました

Hibernate MultipleBagFetchException: How to Resolve Eager Fetching Issues During SessionFactory Creation?

Hibernate: SessionFactory 作成中の MultipleBagFetchException の修正

Hibernate を使用すると、SessionFactory の作成中に例外が発生する可能性があります:

org.hibernate.loader.MultipleBagFetchException: cannot simultaneously fetch multiple bags
ログイン後にコピー

これは通常、複数のコレクションをフェッチするときに発生します。エンティティ内で (FetchType.EAGER を使用して) エンティティを熱心に操作します。これにより、パフォーマンスの問題、データの不整合、メモリ オーバーヘッドが発生する可能性があります。

テスト ケース:

次の例を考えてみましょう:

@Entity
public class Parent {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @OneToMany(mappedBy = "parent", fetch = FetchType.EAGER)
    private List<Child> children;

}

@Entity
public class Child {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @ManyToOne
    private Parent parent;

}
ログイン後にコピー

Inこの場合、Parent.children をフェッチすると、複数の子コレクションを同時にフェッチしようとするため、例外。

考えられる解決策:

1. FetchType.EAGER を削除:

Parent.children マッピングから FetchType.EAGER を削除します。これにより、Hibernate は必要に応じて子を遅延フェッチし、例外を解決します。ただし、パフォーマンスに影響する可能性があります。

2. LazyCollection を使用します:

FetchType.EAGER を使用する代わりに、子フィールドに @LazyCollection(LazyCollectionOption.FALSE) の注釈を付けます。これにより、Hibernate に対してコレクションを積極的にロードするように指示されますが、遅延初期化プロセスを介して例外が回避されます。

3. Set を使用します:

ほとんどの場合、Set を使用することをお勧めします。 List の代わりにマッピングで。セットは順序付けされておらず、重複が許可されていないため、デカルト積の問題が発生する可能性が排除されます。

注意:

セットを使用しても、根本的なデカルト積の問題は解消されません。ヴラド・ミハルセアによって議論された。ただし、一般的にはこれより良いアプローチであり、パフォーマンスを向上させることができます。

以上がHibernate MultipleBagFetchException: SessionFactory 作成中の Eager Fetching の問題を解決するには?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート