-1

UI に jquery 、 Action に 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

1 に答える 1

1

エンティティから遅延フェッチされた属性にアクセスしようとすると、JPA はデータベースに再度アクセスしてデータをフェッチしようとします。あなたの問題は、現時点でトランザクションの外にいることです。openSessionInViewFilter を使用するなど、トランザクションを拡張する方法は多数あります。

( Hibernate/Spring: 遅延初期化に失敗しました - セッションまたはセッションが閉じられませんでした)

私が個人的に好むのは、必要なデータのみを含めて、表示するページごとに 1 つの転送オブジェクトを作成することです。本当に強力で便利な dozer マッパーなどを使用して、エンティティをこれらの転送オブジェクトにマッピングするだけで済みます。そうすれば、トランザクションの管理がはるかに簡単になります。次に、フロントエンドで永続化レイヤーについて何も知る必要がないため、フロントエンドでデータベース エンティティを使用しません。

于 2012-08-03T07:05:38.913 に答える