2011-01-19 4 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

Вы находитесь в веб-приложении, так что HTTP-запрос является thred, или вы что-то еще? – Ralph

+0

Да Я в веб-приложении с весенним mvc. Однако, помимо потока запросов, я создаю его самостоятельно. – Erik

ответ

1

Вы можете использовать Spring впрыснуть SessionFactory в вашу Runnable, открыть Session из него, а также управлять временем жизни Session и Transaction с использованием ванили Hibernate API, не полагаясь на магию управления сеансом весны.

+0

Спасибо! Могу ли я каким-то образом создать DAO, который я создал, расширив HibernateDaoSupport? – Erik

+0

Какие функции HibernateDaoSupport вы бы использовали в этом случае? Из вашего описания вы хотите перейти к функциям управления сессиями и транзакциями. Единственная другая функция, которую я хочу использовать, насколько я могу себе представить, - это перевод исключений. Этого можно достичь с помощью 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). –

Смежные вопросы