Я не могу понять преимущества использования метода обратного вызова Hibernate, есть ли какие-либо преимущества или конкретный вариант использования, где мы должны это делать.
public List findRecentRequests(final int offset, final int length)
{
List list = getHibernateTemplate().executeFind(new HibernateCallback()
{
public Object doInHibernate(Session session) throws HibernateException
{
Query q = session.createQuery(FIND_RECENT_REQUESTS);
q.setFirstResult(offset);
q.setMaxResults(length);
return q.list();
}
});
return list;
}
Также еще один важный вопрос заключается в том, что метод HibernateCallback закрывает сессию каждый раз после того, как запрос возвращает значения? У меня есть случай, когда я вызываю эту функцию несколько раз при каждом обновлении страницы состояния, и так будет каждый раз открывать сессию и базу запросов, или он будет хранить результаты запроса в памяти, а затем каждый раз, когда я вызываю эту функцию, результаты будут выведены из памяти.
Я прочитал (Ссылка):
spring HibernateTemplate.execute() по умолчанию закрывает все открытые сеансы после завершения. При использовании с ленивой инициализацией вы можете получить LazyInitializationException, например следующее
org.hibernate.LazyInitializationException: не удалось инициализировать прокси - нет сеанса
Любая ссылка на соответствующую часть документации будет высоко оценена.
Update:
В моем случае я использую транзакции ejb и устанавливаю его для "поддержки", и я считаю, что в этом случае, когда транзакция настроена на поддержку, она необязательна и поэтому каждый раз новый сеанс будет создан, а спящий режим будет запрашивать базу данных для получения результатов, и поэтому что у меня узкое место, будут ли правильные предположения делать?