У меня есть веб-сервис, который по сути является оболочкой для DAO. Я звоню веб-службе/DAO, чтобы запросить набор сущностей.
«Родительский» класс сущностей содержит набор «дочерних» объектов сущностей, то есть связь «один ко многим». Вызов метода DAO, который извлекает «родительскую» коллекцию сущностей (т. е. myDAO.findAll()), возвращается без проблем, однако конечным результатом вызова веб-службы является следующее исключение:
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: Station.observations, no session or session was closed
Некоторая справочная информация:
У меня есть две сущности: Станция и Наблюдения. Объект Station ("родительский") содержит набор объектов Observations ("дочерних").
Класс DAO для сущностей Station, StationDao, имеет следующий код для вызываемого метода findAll():
private SessionFactory sessionFactory;
private Class<T> persistentClass;
public List<T> findAll()
{
return getCurrentSession().createQuery("from " + persistentClass.getName()).list();
}
В этом случае меня не интересует, чтобы коллекция детей (наблюдений), связанных с родителями (станциями), была полностью извлечена до того, как коллекция родителей будет возвращена. Однако кажется, что предпринимается некоторая попытка полностью получить эти дочерние объекты (наблюдения) перед возвратом коллекции родительских (станционных) объектов в ответе, и это не удается, поскольку исходный сеанс больше недоступен.
Кто-нибудь может подсказать, как мне обойти эту ошибку? Возможно, есть способ сохранить сеанс в течение срока действия запроса?
Заранее спасибо за вашу помощь!
--Джеймс