Hibernate を使用した Spring MVC (3.1) Web アプリがすべて正常に動作しています。今日、構成をアノテーション ベースの構成に完全に移行しようとしました (コード構成で Spring によってまだサポートされていないセキュリティ要素には xml のみを使用)。 )。
いくつかの調整の後、エラーなしでアプリを開始し、ホームページが正しく読み込まれました - ただし、Hibernate セッションでいくつかの異なる動作が見られます - つまり、実際に Hibernate エンティティに触れるページを読み込むときに次のエラーが発生します:
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.tmm.web.domain.Profile.connections, no session or session was closed
これは、次のシナリオで発生しています。
- リクエストがヒットし、ユーザーオブジェクト
@Controller
をロードしますProfile
- 同じメソッド呼び出しで (したがって、ここでは切り離されたエンティティなどについては話していません)、呼び出しを試みます
profile.getConnections()
Profile.connections は実際には fetchtype を明示的に指定していないため、デフォルトで熱心な読み込みを行う必要があります (私の理解ですか?) が、いずれにせよ、
getConnections()
呼び出しはの読み込みの直後にprofile
行われるため、遅延読み込みされていたとしても、 DB に戻り、必要に応じて接続をロードするだけです。//@Controller コード Account viewsUser = accountService.loadAccountByUserName(userName); model.put("viewedUserConnections"、viewedUser.getUserProfile().getConnections());
//Profile Entity @OneToMany(mappedBy = "user", cascade = CascadeType.ALL) private List connections = new ArrayList();
今、私は遅延読み込みなどについて知っているので、それについての質問ではありません-すべてのHibernateが正しく機能していると述べたように-本当に私の質問は、どのSpring構成がこの動作に影響を与える可能性があるかです?
前後のxmlと注釈構成を投稿できますが、切り替えで見逃した可能性のある構成の方向を誰かが教えてくれることを願っています。