2011-01-19 13 views
2

私はSpring 3をHibernateと共に使用しています。私は、春のコントローラでJavaスレッドを開始し、その後、ユーザーのhttp応答が送信されている間、スレッドが動作し続けるように応答が送信されるように、ユーザーリクエストを受け取りました。Spring/Hibernate:スレッドのセッションを開いたままにするか、新しいセッションを開きますか?

私は私のスレッドで怠惰なコレクションで働いている場合は、私は次のエラーを取得する:

org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: my.model.MyClass.lazyCollection, no session or session was closed 

私は、私は完全に怠惰なコレクションをフェッチするが、私はこれを使用することはできませんのHibernate.initialize(エンティティ)を使用することができます読んで私はただのスレッドでコレクションを充填しています。さらに、私はmerge()を使用しようとしましたが、それでも問題は解決しません。

手動でセッションを開いたままにしたり、スレッドの新しいセッションを開く方法はありますか?

ありがとうございました!

+0

あなたはWebアプリケーション内にいるので、httpリクエストが発生していますか、それとも何か他のことをしていますか? – Ralph

+0

はいspring mvcを使用したWebアプリケーションです。しかし、リクエストスレッドに加えて、自分で作成しています。 – Erik

答えて

1

あなたはそれからSessionを開き、春のセッション管理の魔法に頼ることなく、バニラのHibernateのAPIを使用してSessionTransactionの寿命を管理し、あなたのRunnableSessionFactoryを注入するために春を使用することができます。

+0

ありがとう!私はまだ何とか私のDAOは、私はHibernateDaoSupportを拡張して作成したものですか? – Erik

+0

この場合、HibernateDaoSupportのどの機能を使用しますか?あなたの説明から、あなたはセッションとトランザクション管理の機能をサイドステップしたいと思っています。私が想像する限り、yiumightが使用したい唯一の他の機能は例外翻訳です。これは、http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/orm/hibernate3/SessionFactoryUtils.html#newJdbcExceptionTranslator(org.hibernate.SessionFactory) –

+0

@Erikを使用して実現できます。申し訳ありません、以前のリンクが間違っています。代わりにhttp://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/orm/hibernate3/SessionFactoryUtils.html#convertHibernateAccessException(org.hibernate.HibernateException)を参照してください。 –

関連する問題