0

UIにjQuery、アクションとしてStruts2、データアクセスレイヤーにJPAを使用しています。

私が直面している問題はLazyInitializationException、データベースから値を取得しようとしたときに得られることです。以下のスタックトレースを取得します。

org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.singpost.ctf.core.persistence.CtfTxn.ctfTxnAttribs, no session or session was closed

デフォルトFetch="LAZY"の場合、コードは正常に機能しています。しかし、Fetchタイプをに変更するとEAGER、さらに何をしなければならないのかわかりません。私は途中で立ち往生しています。

4

2 に答える 2

0

エラー メッセージが示すように、コレクションにアクセスしようとすると、休止状態セッションは既に閉じられています。解決策は、セッションがまだ開いていることを確認するか (JTA を使用している場合、トランザクションがコミットされるとセッションが閉じられます)、遅延読み込みを使用しないことです (発見したように)。

于 2012-08-03T10:36:05.523 に答える
-1

I don't know what I have to do further.

これは一般的な問題であるため、Zareth の回答を拡張します。

fetch=FetchType.LAZYのマッピングで が宣言されている場合ctfTxnAttribs、JPA はプロキシ オブジェクトのコレクションをロードします。各オブジェクトは のように見えますがctfTxnAttrib、プロキシにすぎません。

Web ページまたは Bean がそのコレクション内のオブジェクトにアクセスしようとするまで、これはすべて正常に機能しているように見える場合があります。次にlazyInitializationException、永続化プロバイダーがプロキシのみを見つけるため、を取得します。

Zareth が指摘したように、プロキシのコレクションに実際のctfTxnAttrib.

これを実装するにはさまざまな方法があります。デザイン パターンを含む、このトピックに関する非常に優れた記事を次に示しますOpen Session In View

http://www.javacodegeeks.com/2012/07/four-solutions-to-lazyinitializationexc_05.html

于 2015-12-18T21:35:06.207 に答える