2011-01-31 13 views
0

私はちょうど春+休止中の初心者です。私はシンプルなプロジェクトをやっています。トランザクション、簡単なサービス、シンプルなDAO、注釈付きのすべての豆について、eveythingを設定しました。怠惰なローディングに関するSpring hibernateエラー

リストを使用すると、Criteriaクエリを使用して、オブジェクトとそのプロパティをリストすることができます。私はオブジェクトをロードしようとした場合でも:

Session sess = sessionFactory.getCurrentSession(); 
Ordine res = (Ordine) sess.load(Ordine.class, id); 
return res; 

クエリが正常に動作するようですが、私は(文字列)ビューは、プロパティを読み取ろうとする厄介な例外を取得:

組織

: - :.hibernate.LazyInitializationExceptionは、私もこれはスタートアップログで気づい

なしセッションプロキシを初期化できませんでした

INFO:種類の豆「mySessionFactory」[クラスorg.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean]は(例:自動プロキシの対象とならない)すべてBeanPostProcessorsによって処理されたばかりの対象ではありません

何これはすべて意味ですか?

答えて

0

あなたは、おそらくあなたは、いくつかの選択を書く私はそれを見る方法を持っているOpenSessionInViewFilter

4

を使用する必要が

  • フォースあなたのオブジェクト(例えば、あなたの永続性注釈にfetch=FetchType.EAGERを設定)遅延ロードされないように。
  • OpenSessionInViewFilter
  • ビュー内で呼び出す前に、データレイヤーで(値を読み込むために)ルーチンのメソッドを呼び出します。

[編集]これは私が最初に提案したようには全く機能しません。

  • transactionsを追加します。 @Transactionalを使用してコントローラールーチンに注釈を付けます。
+0

* '@ Transactional'を使用してコントローラルーチンに注釈を付ける*それは機能しますか?ビューはコントローラの範囲を超えていますか? –

+0

私は一度試してみましたが、正しく覚えていれば、それはうまく動作しました(私の記憶は曇っているかもしれません)。これはもちろん、トランザクションのスキャンに必要なすべてのスプリング構成を持っていることを前提としています。 –

+0

この回答は正解です。@TransactionalからSeanのコメントを差し引いたものです。 – sourcedelica

0

ショーン、

FetType.EAGERはあなたの最も簡単な解決策である=フェッチ設定についてのヨハンの提案。ただし、このソリューションを使用する場合は注意が必要です。 。

Query q = this.em.createQuery("select x from PrimaryEntity x \n" 
+ "left join fetch x.secondaryEntityField \n " 
+ "where x.selectionProperty = :selection"); 
+0

ええと、ショーンは質問しませんでした:-) –

0

org.hibernate.Hibernate級のいくつかの便利な静的なユーティリティメソッドがあります。時々、あなたが興味を持っている関連するエンティティにフェッチ参加例えば左を行うには、あなたのDAOクエリを変更することによって、あなたの問題を解決することができます例えば、Hibernate.initializeを参照してください。あなたはまだそれのためのオープンセッションが必要です。おそらく最も簡単な方法はOpenSessionInViewFilterを使用しているかもしれません。フェッチタイプをeagerに設定するか、他の答えに示唆されているように、遅延関係をロードするようにクエリを変更します。

関連する問題