Я хочу использовать Spring MVC и Hibernate.Я не хочу использовать служебный слой или атрибут @Transactional
во всех методах контроллера (или, скорее, я хочу, чтобы Spring воспринимал их как транзакционные).Поэтому я хочу начать транзакцию, когда метод контроллера начинает работать с базой данных, и зафиксировать транзакцию, когда метод контроллера возвращает ViewAndModel или транзакцию отката, если произошла какая-либо ошибка.Также я хочу, чтобы view поддерживал отложенную загрузку в спящем режиме, например, выбирал данные в режиме автоматической фиксации, если html-шаблон запрашивает это.
Я знаю, что передовой практикой является создание отдельного сервисного слоя с атрибутом @Transactional
, но мойприложение не будет извлекать выгоду из этой дополнительной сложности, и я хочу максимально упростить код.
Я узнал, что OpenSessionInViewInterceptor
позволяет продолжать использовать сеанс hibernate, так что, вероятно, это решает мое второе требование,Но как мне сделать все методы контроллера транзакционными?
В идеале я хочу простой способ отказаться от такого поведения, если мне это когда-нибудь понадобится.Например, все методы являются транзакционными, но я могу применить что-то вроде @NonTransactional и более детально управлять транзакциями.