Ответ 1
Поскольку его основная цель заключалась в том, чтобы связать сессию Hibernate с текущей транзакцией Spring, когда SessionFactory.getCurrentSession()
не существовало. Поскольку он существует (и в течение длительного времени: использование HibenateTemplate не рекомендуется даже в пакете hibernate3), нет причин использовать этот Spring -специфический класс вместо использования SessionFactory.getCurrentSession()
, чтобы получить сеанс, привязанный к текущему Spring.
Если вы используете Spring, вы должны использовать его декларативное управление транзакциями, что позволяет избежать открытия, фиксации, закрытия и очистки. Все это делается с помощью Spring автоматически:
@Autowired
private SessionFactory sessionFactory;
@Transactional
public void someMethod() {
// get the session for the current transaction:
Session session = sessionFactory.getCurrentSession();
// do things with the session (queries, merges, persists, etc.)
}
В приведенном выше примере транзакция будет запущена (если она еще не запущена) перед вызовом метода; Сеанс будет создан Spring для транзакции, и сеанс будет автоматически очищен до совершения транзакции, который будет выполняться с помощью Spring автоматически при возврате метода.