2017-10-22 9 views
3

私はHibernate 5.0でSpringブートプロジェクトで作業しています。残念ながら、Hibernateは、トランザクションがコミットされた後でも、LazyInitializationExceptionを投げずに、遅延初期化オブジェクトを読み込みます。 LazyInitializationExceptionをトランザクション外にするにはどうすればよいですか?HibernateがSpringブートプロジェクトでLazyInitializationExceptionをスローしていない

(現在の動作は、コードのバグを隠します。)

+0

詳細をお知らせください。 showSqlオプションを有効にし、hibernateによって発行されたクエリを調べ、トランザクション中に遅延フィールドが取得されているかどうかを確認します。 –

+0

本当に遅延オブジェクトが本当に初期化されていますか? – Lino

+0

Lazy-loadingはトランザクションとは関係ありませんが、EntityManagerのライフサイクルはリクエスト全体でデフォルトで開いています(以下のBabtisteの回答を参照してください)。あなたは "隠れバグ"の陳述を詳しく説明できますか?なぜ適切な結果を返すメソッドを呼び出すことができないのですか? –

答えて

5

春ブーツが真のデフォルト値を持つプロパティspring.jpa.open-in-viewを持っています。これにより、要求全体に対してトランザクションが生き続けるようになるOpenEntityManagerInViewInterceptorが登録されます。

あなたのapplication.propertiesファイルにこれを追加してみてください:

spring.jpa.open-in-view=false 

A discussion about it on GitHub

Some documentation about Spring Boot properties

は、それが助けを願って!

関連する問題