Spring Bootのドキュメントで、JPA構成spring.jpa.open-in-view=true
のこのプロパティを見ました。ちなみに、これはtrueに設定されていたので、デフォルト値ですか?
それは本当にどういう意味ですか?この振る舞いについての説明は見つかりませんでした。
SessionFactory
の代わりにHibernate EntityManagerFactory
を使用する必要がありますか?はいの場合、どのようにEntityManagerFactory
に設定できますか?
ヘルプを感謝します。
ありがとう!
このプロパティは、現在のスレッドにOpenEntityManagerInViewInterceptor
を登録するEntityManager
を登録するため、Webリクエストが完了するまで同じEntityManager
を保持します。 Hibernate SessionFactory
などとは関係ありません。
残念ながら、 OSIV(Open Session in View)はデフォルトでSpring Bootで有効になっています 、および OSIVはパフォーマンスとスケーラビリティの観点からは本当に悪い考えです です。
そのため、application.properties
構成ファイルに次のエントリがあることを確認してください。
spring.jpa.open-in-view=false
これによりOSIVが無効になり、 LazyInitializationException
を正しい方法で処理 できるようになります。
バージョン2.0以降、Spring Bootの問題は OSIVの場合の警告 がデフォルトで有効になっているため、実稼働システムに影響するずっと前にこの問題を発見できます。