Лучше перейти на многоуровневую архитектуру Сервис и уровень DAO, напрямую обрабатывая транзакции в управляемом бине, что противоречит цели принципа единой ответственности класса.
Назначение управляемого объекта Bean должно быть предназначено для обработки навигации и шлюза для данных от уровня представления к уровню обслуживания, где вы можете выполнять основную бизнес-логику или вариант использования и делегировать сохранение данных на уровне DAO.
Что касается сообщений в пользовательский интерфейс, вы можете перехватывать исключения из сервисного уровня и заполнять требуемое сообщение соответствующим образом.
Таким образом, все становится более управляемым, обслуживаемым и проверяемым. Смоделируйте свой сервисный уровень, протестируйте DAO на предмет сохранности данных и Managed Bean для уровня представления.
Spring использует прокси / AOP для магического @Transactional, и его лучше кодировать для взаимодействия, так как у него есть свои проблемы, если вы не пишете код для интерфейса, т.е. прямой прокси для интерфейса или подкласса CGLIB для инъекции. Ищите в документации теги для настройки прокси, чтобы лучше понять, что я имею в виду под кодом для интерфейса.
Примечание: HibernateTemplate считается Anti Pattern и удален из поддержки Hibernate 4 только указателем, поэтому вы можете действовать соответствующим образом, если в Hibernate 3.
Надеюсь, это поможет !!!!!