Spring / Hibernate: оставить сеанс открытым для потока или открыть новый? - PullRequest
2 голосов
/ 19 января 2011

Я использую Spring 3 вместе с Hibernate. У меня есть запрос пользователя, который запускает поток Java в контроллере Spring, а затем отправляется ответ, поэтому поток может продолжать работать, пока ответ http пользователя уже был отправлен.

Если я работаю с ленивыми коллекциями в моей ветке, я получаю следующую ошибку:

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

Я прочитал, что могу использовать Hibernate.initialize (entity) для полного извлечения отложенных коллекций, но я не могу использовать это, так как я заполняю коллекцию только в потоке Кроме того, я попытался использовать merge (), но это все равно не решило проблему.

Есть ли способ сохранить сеанс вручную или открыть новый для потока?

Спасибо за вашу помощь!

1 Ответ

1 голос
/ 20 января 2011

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

...