Hibernate получить коллекцию из другого сеанса - PullRequest
0 голосов
/ 28 марта 2011

Привет, я получил печально известное «ни один сеанс или сеанс не был закрыт», я знаю, что это потому, что я пытаюсь вызвать коллекцию сохраненного объекта гибернации в другом сеансе, так что есть ли способ сделать это безнеобходимость создать фильтр и добавить в него режим извлечения JOIN ....

GRAVE: не удалось лениво инициализировать коллекцию ролей: ni.edu.uni.id.data.object.Curso.modulos,ни один сеанс или сеанс не был закрыт org.hibernate.LazyInitializationException: не удалось лениво инициализировать коллекцию ролей: ni.edu.uni.id.data.object.Curso.modulos, ни один сеанс или сеанс не был закрыт

Ответы [ 3 ]

0 голосов
/ 28 марта 2011

Лучше обновить постоянный объект. Например. вызовите DAO getById(), передав идентификатор объекта, а затем используйте необходимую коллекцию.

0 голосов
/ 23 октября 2012

Это происходит потому, что исходный сеанс закрыт.Перед сохранением элемента в памяти и до закрытия сеанса Hibernate необходимо получить доступ ко всем связанным коллекциям, которые будут использоваться позже, чтобы он был загружен в память.Альтернативой этому является настройка коллекции таким образом, чтобы она загружалась Eager, однако это может повлиять на производительность.

Предварительную загрузку коллекции можно легко выполнить, даже обратившись к свойству .Count (C #, ното же самое относится и к Java).Пример:

Brand b = BrandRepository.GetById(1234);
int tmp = b.Products.Count; //this is only to load the products collection.  This can then be used in a later session.
0 голосов
/ 28 марта 2011

session.merge МОЖЕТ помочь в зависимости от вашей конкретной ситуации

...