Безопасное включение/отключение фильтров в Hibernate
Иногда, при выполнении запроса, вам необходимо отключить некоторые фильтры Hibernate. Для этого можно использовать методы сессии - disableFilter(String), enableFilter(String). Если фильтр по умолчанию включен, то сначала его отключают, потом выполняют запрос, а затем включают снова. Но если в промежутке между отключением и включением фильтра будет брошено исключение, то код снова включающий фильтр, выполнен не будет, и если исключение будет обработано таким образом, что выполнение программы не прекратится, то ее дальнейшее поведение может быть непредсказуемым. Запросы, зависящие от выключенного фильтра будут возвращать ненужные данные.
Чтобы избежать такой ситуации, вызов метода включающего фильтр, необходимо заключить в блок finally:
try {
session.disableFilter("filterName");
.....
} finally {
session.enableFilter("filterName");
}

Ваш отзыв