В правильно сконфигурированном приложении Spring оба они эквивалентны, за исключением одного случая: когда нет текущего контекста транзакции.В этом случае getCurrentSession () не будет работать, тогда как использование HibernateCallback откроет для вас сеанс и транзакцию Hibernate и закроет их в конце.
Обратите внимание, что в документации HibernateTemplate упоминается, что следует отдавать предпочтение getCurrentSession ():
ПРИМЕЧАНИЕ. Начиная с Hibernate 3.0.1, транзакционный код доступа Hibernate можеттакже быть закодировано в простом стиле Hibernate.Следовательно, для вновь начатых проектов рассмотрите возможность принятия вместо этого стандартного стиля Hibernate3 для кодирования объектов доступа к данным на основе SessionFactory.getCurrentSession ().
В нем также говорится:
Обратите внимание, что HibernateTemplate будет выполнять свое собственное управление сеансами, не участвуя в настраиваемом Hibernate CurrentSessionContext, если вы явно не переключите «allowCreate» на «false».
Таким образом, смешивание обоих способов выполнения не является хорошей идеей.
Я предпочитаю избегать HibernateTemplate, напрямую использовать API сеанса Hibernate и использовать декларативные транзакции, управляемые Spring.