Это вопрос дизайна, конкретный код не представлен для защиты моего основания.
При работе с Hibernate стандартный рабочий процесс выглядит следующим образом:
- Открыть сеанс
- Запустить транзакцию
- Сделайте бизнес (прочитайте и измените данные)
- Commit Transaction
- Закрытие сеанса
с возможными итерациями через 2-4.
Каковы разумные варианты использования Session.clear()?
A: Конкретная проблема, с которой я столкнулся, - это (большая) часть кода, которая загружает и изменяет сущности, а затем очищает() s сеанс, существенно отбрасывая сделанные изменения. (Деловая задача, которая должна быть выполнена, не включает в себя модификацию объектов, поэтому код "работает" ).
Кажется, что правильным дизайном было бы удостовериться, что (большая) часть кода не вносит изменений, которые он не хочет сохранять?
B: Я бы предположил, что Session.clear() существует для удобства/гибкости, а не потому, что это хорошая идея использовать его.
Я неправильно понял философию гиберната?
C: Subquestion: это плохая идея для кода фрейма безоговорочно очистить() сеанс, когда задача завершается? IMHO, структура должна жаловаться, если сеанс грязный, когда задача завершается! Сессия должна быть закрыта, поскольку задача выполняется... (без учета производительности за минуту)
(Ярлыки A, B и C, чтобы вы могли указать, какую часть вы отвечаете).