Hibernate: Можно ли сделать автоматическую очистку при фиксации транзакции?
У меня есть много отдельных функций, и я обязан выполнить session.clear () для транзакции.commit () в каждой из них для освобождения памяти.
Возможно, я ошибаюсь, но я думаю, что session.clear () в спящем режиме не вызывается по умолчанию для Transactions.commit ().
Я хотел бы знать, есть ли какой-нибудь способ, которым я мог бы, вероятно, настроить hibernate для автоматической очистки сеанса при каждой транзакции.mit (), даже не делая session.clear()?
Любое другое решение вышеуказанной проблемы будет высоко оценено.
1 ответ
Он называется шаблоном сеанса на транзакцию: вы создаете сеанс, когда начинаете транзакцию, и закрываете его после фиксации (обратите внимание, что очистка сеанса и фиксация транзакции имеет почти тот же эффект, что и закрытие сеанса, особенно если вы используете пул соединений),
Если вы используете Hibernate в автономной среде, вам необходимо настроить контекстные сеансы с hibernate.current_session_context_class = thread
, В этом случае контекстная сессия (полученная getCurrentSession()
) будет автоматически закрываться при фиксации транзакции.
Если вы используете EJB или Spring Framework, вы можете использовать средства управления транзакциями, предоставляемые этими платформами. Они также поддерживают эту модель.