Spring hibernate шаблон, когда использовать и почему? - PullRequest
47 голосов
/ 01 ноября 2010

Привет, В настоящее время разрабатывается небольшое приложение веб-службы, в котором ответ от веб-службы (с использованием CXF + Spring) обрабатывается и сохраняется в базе данных.Для работы с базой данных я использую Hibernate (3.5).Просматривая некоторые примеры Hibernate + Spring в Интернете, я часто вижу использование HibernateTemplate, поэтому я немного смущен этим моментом и хотел спросить:

Используете ли вы HibernateTemplate в своих приложениях Hibernate3?Когда HibernateTemplate может сделать вашу жизнь лучше и исходя из того, какие моменты я могу решить, нужно ли мне ее использовать или нет?

Спасибо.

Ответы [ 5 ]

51 голосов
/ 01 ноября 2010

Все весенние шаблоны (hibernate, jdbc, rest, jpa и т. Д.) Имеют одинаковые плюсы и минусы:

Pro: Они выполняют обычные процедуры настройки для вас, позволяют пропустить шаблон и сосредоточиться на логике, которую вы хотите.

Con: Вы плотно соединяете свое приложение с рамой пружины. По этой причине Spring рекомендует не использовать HibernateTemplate.

В частности, HibernateTemplate сделал для вас автоматическое открытие и закрытие сеансов и фиксацию или откат транзакций после выполнения вашего кода. Однако все это может быть достигнуто аспектно-ориентированным способом с помощью декларативного управления транзакциями Spring 1014 *.

Справка:


Обновление:

Начиная с Spring 3.1 (и более новых версий), HibernateTemplate было удалено . См. Hibernate для предлагаемых в настоящее время моделей использования.

11 голосов
/ 29 марта 2012

Позвольте мне пояснить одну вещь, что Spring HibernateTemplate не будет поддерживаться в будущем, это означает, что версии Hibernate 4+ не поддерживают HibernateTemplate.Поэтому рекомендуется использовать декларативное управление транзакциями , как предлагает Шон.

5 голосов
/ 01 ноября 2010

HibernateTemplate заключает в себе множество вещей, которые сделают вашу жизнь проще.

Это ваш выбор, использовать его или нет.В этом отношении вы можете работать с базой данных без Hibernate.Материал Spring JDBC очень хорош.Возможно, вам будет легче решить вашу проблему, не изучая Hibernate.

1 голос
/ 15 июня 2015

Все шаблоны будут устаревшими в будущем.Лучше использовать менеджер сущностей, который является стандартом JPA.

1 голос
/ 29 сентября 2012

Шаблон OpenSessionInViewFilter эффективен.Это открывает сеанс Hibernate и привязывает его к вашему потоку во время обработки каждого запроса.OpenSessionInView также расширяет возможности Session и loadability для визуализации View и слоя View, что уменьшает сцепление и сложность (позволяя «просто работать»).

Моя философия не совсем согласна с аспектно-ориентированным / декларативнымуправление транзакциями.Мне нравится делать крупные события изменения состояния / жизненного цикла «явными», поскольку они должны быть абсолютно определенными, а не слабо зависимыми от нескольких скрытых и косвенных слоев, которые могут работать или не работать.

Это обеспечивает точкудля отладки в.

TX commit - только одна строка кода;но это главное, на котором вы хотите установить точку останова.Больше не синтаксически, чем «транзакционное» объявление;но чертовски много более определенного.

Честно говоря, я считаю, что «пользовательские команды» или «запросы», которые являются подходящим местом для инициирования транзакций и управления транзакциями, должны быть хорошо структурированы, четко определены& довольно явно в приложении.

(У меня были проблемы с тем, чтобы заставить загрузку классов аспектов работать, пробуя ее, когда она появилась впервые. Моя оценка по сравнению с хорошо написанным ОО-кодом, аспект имеет только ограниченное предельное значение.)

Совет: я обычно делаю вспомогательный класс, чтобы сделать его действительно удобным для получения сеанса и фиксации транзакции..

HbHelper или что-то подобное.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...