HibernateCallback и getCurrentSession разница - PullRequest
0 голосов
/ 13 июля 2011

Могу ли я использовать geCurrentSession () вместо HibernateCallback для получения сеанса? Если оба сеанса управляются Spring, зачем мне обратный вызов? Есть ли какое-либо преимущество в производительности, связанное с этим?

1 Ответ

2 голосов
/ 13 июля 2011

В правильно сконфигурированном приложении Spring оба они эквивалентны, за исключением одного случая: когда нет текущего контекста транзакции.В этом случае getCurrentSession () не будет работать, тогда как использование HibernateCallback откроет для вас сеанс и транзакцию Hibernate и закроет их в конце.

Обратите внимание, что в документации HibernateTemplate упоминается, что следует отдавать предпочтение getCurrentSession ():

ПРИМЕЧАНИЕ. Начиная с Hibernate 3.0.1, транзакционный код доступа Hibernate можеттакже быть закодировано в простом стиле Hibernate.Следовательно, для вновь начатых проектов рассмотрите возможность принятия вместо этого стандартного стиля Hibernate3 для кодирования объектов доступа к данным на основе SessionFactory.getCurrentSession ().

В нем также говорится:

Обратите внимание, что HibernateTemplate будет выполнять свое собственное управление сеансами, не участвуя в настраиваемом Hibernate CurrentSessionContext, если вы явно не переключите «allowCreate» на «false».

Таким образом, смешивание обоих способов выполнения не является хорошей идеей.

Я предпочитаю избегать HibernateTemplate, напрямую использовать API сеанса Hibernate и использовать декларативные транзакции, управляемые Spring.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...