Spring hibernate шаблон, когда использовать и почему?
Привет,
В настоящее время разрабатывается небольшое приложение для веб-сервисов, в котором ответ от веб-службы (с использованием CXF + Spring) обрабатывается и сохраняется в базе данных. Для работы с базой данных я использую Hibernate (3.5). Просмотр примера Hibernate + Spring в Интернете, я часто вижу использование HibernateTemplate, поэтому я немного запутался в этот момент и хотел спросить:
Используете ли вы HibernateTemplate в своих приложениях Hibernate3?
Когда HibernateTemplate может улучшить вашу жизнь разработки и основываться на том, какие моменты я могу решить, нужно ли мне это использовать или нет?
Спасибо.
Ответы
Ответ 1
Все шаблоны spring (hibernate, jdbc, rest, jpa и т.д.) имеют те же плюсы и минусы:
Pro: Они выполняют общие процедуры настройки для вас, позволяют пропустить шаблон и сконцентрироваться на требуемой логике.
Con: вы тесно привязываете приложение к структуре spring. По этой причине spring рекомендует HibernateTemplate
больше не использовать.
В частности, для вас HibernateTemplate
было автоматически открывать и закрывать сеансы, а также совершать транзакции или выполнять транзакции после выполнения кода. Однако все это может быть достигнуто с точки зрения аспекта, используя spring Декларативное управление транзакциями.
Справка:
Update:
По состоянию на spring 3.1 (и более новые версии) HibernateTemplate
удален. См. Hibernate для предлагаемых в настоящее время шаблонов использования.
Ответ 2
Позвольте мне пояснить одно, что Spring HibernateTemplate не будет поддерживаться в будущем, это означает, что версии Hibernate 4+ не поддерживают HibernateTemplate. Поэтому рекомендуется использовать декларативное управление транзакциями, как это предложил Шон.
Ответ 3
HibernateTemplate инкапсулирует несколько вещей, чтобы сделать вашу жизнь проще.
Это ваш выбор использовать это или нет. В этом случае вы можете работать с базой данных без спящего режима. Spring Материал JDBC очень хорош. Возможно, вам будет легче решить проблему, не изучая Hibernate.
Ответ 4
Эффект шаблона OpenSessionInViewFilter. Это открывает сеанс Hibernate и связывает его с вашим потоком во время обработки каждого запроса. OpenSessionInView также расширяет сеанс и загруженность для просмотра рендеринга и слоя "Вид", что уменьшает связь и сложность (позволяя "просто работать" ).
Мои философии не согласны с управлением транзакциями на основе аспектов/деклараций. Мне нравится делать "явные" события изменения состояния/жизненного цикла "явными", поскольку они должны быть абсолютно определенными, а не слабо зависят от нескольких скрытых и косвенных уровней, которые могут работать или не работать.
Он обеспечивает отправку отладки.
Передача TX - это только одна строка кода; но это главное, на что вы хотите остановиться. Больше не синтаксически, чем "транзакционное" объявление; но, черт возьми, гораздо более определенно.
Честно говоря, я нахожу "пользовательские команды" или "запросы", которые являются надлежащим местом для инициирования транзакции и контроля над транзакциями, должно быть хорошо структурированным, хорошо идентифицированным и достаточно явным в приложении.
(У меня возникли проблемы с загрузкой материала для загрузки класса аспект, когда он впервые появился. Моя оценка такова, что по сравнению с хорошо написанным кодом OO аспект имеет ограниченное предельное значение.)
Совет. Обычно я делаю вспомогательный класс, чтобы сделать его действительно удобным для сеанса и совершить транзакцию.
HbHelper или somesuch.
Ответ 5
Все шаблоны будут устаревать в будущем. Лучше использовать диспетчер объектов, который является стандартом JPA.