「遅延読み込み」については1つ疑問があります。 @LazyCollection(LazyCollectionOption.FALSE)
と@OneToMany(fetch = FetchType.EAGER)
の使用の違いは何ですか?
私のアプリケーションでは2つのリストを使用していますが、この形式で使用する場合:
@OneToMany(mappedBy = "consultaSQL", orphanRemoval = true, fetch = FetchType.EAGER,
cascade = CascadeType.ALL)
private List<ParametroSQL> parametros;
@OneToMany(mappedBy = "consulta", orphanRemoval = true, fetch = FetchType.EAGER,
cascade = CascadeType.ALL)
private List<Contato> contatos;
私はこのエラーがあります:
原因:org.hibernate.loader.MultipleBagFetchException:複数のバッグを同時にフェッチできません
これは、Hibernateが2つのリストを同時にロードできないために発生することを知っています。しかし、この形式を使用する場合:
@LazyCollection(LazyCollectionOption.FALSE)
@OneToMany(mappedBy = "consultaSQL", orphanRemoval = true,
cascade = CascadeType.ALL)
private List<ParametroSQL> parametros;
@LazyCollection(LazyCollectionOption.FALSE)
@OneToMany(mappedBy = "consulta", orphanRemoval = true,
cascade = CascadeType.ALL)
private List<Contato> contatos;
それは完全に動作します。
英語のおかげでごめんなさい
アノテーション間の基本的な違いは、@OneToMany
とそのパラメータ(例:fetch = FetchType.EAGER
)は純粋なJPAです。 HibernateやEclipseLinkなどの任意のJPAプロバイダーで使用できます。
@LazyCollection
一方、Hibernate固有であり、Hibernateを使用する場合にのみ機能します。
可能であれば、できるだけJPA仕様に準拠するようにしてください。これにより、プロバイダーを簡単に切り替えることができます(少なくとも理論的には)。
あなたの本当の問題については、 this 回答が示唆するように、JPA 2.0をサポートしないHibernateバージョンを使用している可能性がありますか?
私はこれと同じ問題を抱えていると思います...
すべてのコレクションを試してください...
@Fetch(FetchMode.SUBSELECT)
エラーを排除する必要があります
この投稿で提案されているように、 https://stackoverflow.com/a/5865605/5619076 セットごとにリストを変更すると、MultipleBagFetchExceptionが解決されます。それは私のものを解決しました。