Шаблон OpenSessionInViewFilter эффективен.Это открывает сеанс Hibernate и привязывает его к вашему потоку во время обработки каждого запроса.OpenSessionInView также расширяет возможности Session и loadability для визуализации View и слоя View, что уменьшает сцепление и сложность (позволяя «просто работать»).
Моя философия не совсем согласна с аспектно-ориентированным / декларативнымуправление транзакциями.Мне нравится делать крупные события изменения состояния / жизненного цикла «явными», поскольку они должны быть абсолютно определенными, а не слабо зависимыми от нескольких скрытых и косвенных слоев, которые могут работать или не работать.
Это обеспечивает точкудля отладки в.
TX commit - только одна строка кода;но это главное, на котором вы хотите установить точку останова.Больше не синтаксически, чем «транзакционное» объявление;но чертовски много более определенного.
Честно говоря, я считаю, что «пользовательские команды» или «запросы», которые являются подходящим местом для инициирования транзакций и управления транзакциями, должны быть хорошо структурированы, четко определены& довольно явно в приложении.
(У меня были проблемы с тем, чтобы заставить загрузку классов аспектов работать, пробуя ее, когда она появилась впервые. Моя оценка по сравнению с хорошо написанным ОО-кодом, аспект имеет только ограниченное предельное значение.)
Совет: я обычно делаю вспомогательный класс, чтобы сделать его действительно удобным для получения сеанса и фиксации транзакции..
HbHelper или что-то подобное.