Hibernate (библиотека)

Эта статья находится на начальном уровне проработки, в одной из её версий выборочно используется текст из источника, распространяемого под свободной лицензией
Материал из энциклопедии Руниверсалис
Hibernate

Hibernate — библиотека для языка программирования Java, предназначенная для решения задач объектно-реляционного отображения (ORM), самая популярная реализация спецификации JPA. Распространяется свободно на условиях GNU Lesser General Public License.

Позволяет сократить объёмы низкоуровневого программирования при работе с реляционными базами данных; может использоваться как в процессе проектирования системы классов и таблиц «с нуля», так и для работы с уже существующей базой.

Библиотека не только решает задачу связи классов Java с таблицами базы данных (и типов данных Java с типами данных SQL), но и также предоставляет средства для автоматической генерации и обновления набора таблиц, построения запросов и обработки полученных данных и может значительно уменьшить время разработки, которое обычно тратится на ручное написание SQL- и JDBC-кода. Hibernate автоматизирует генерацию SQL-запросов и освобождает разработчика от ручной обработки результирующего набора данных и преобразования объектов, максимально облегчая перенос (портирование) приложения на любые базы данных SQL.

Hibernate обеспечивает прозрачную поддержку сохранности данных (persistence) для «POJO» (то есть для стандартных Java-объектов); единственное строгое требование для сохраняемого класса — наличие конструктора по умолчанию (без параметров). Для корректного поведения в некоторых приложениях требуется также уделить внимание методам equals() и hashCode()[1].

Существует порт библиотеки для .NETNHibernate. Альтернативные ORM-фреймворки для Java — MyBatis[en], iBATIS[en], TopLink[en], EclipseLink.

Отображение

Отображение (mapping, сопоставление, проецирование) Java-классов с таблицами базы данных осуществляется с помощью конфигурационных XML-файлов или Java-аннотаций. При использовании файла XML Hibernate может генерировать скелет исходного кода для классов длительного хранения. В этом нет необходимости, если используется аннотация. Hibernate может использовать файл XML или аннотации для поддержки схемы базы данных.

Обеспечиваются возможности по организации отношения между классами «один-ко-многим» и «многие-ко-многим». В дополнение к управлению связями между объектами Hibernate также может управлять рефлексивными отношениями, где объект имеет связь «один-ко-многим» с другими экземплярами своего собственного типа данных.

Hibernate поддерживает отображение пользовательских типов значений. Это делает возможными такие сценарии:

  • переопределение типа по умолчанию SQL, Hibernate выбирает при отображении столбца свойства;
  • отображение перечисляемого типа Java на поле базы данных, будто они являются обычными свойствами;
  • отображение одного свойства в несколько столбцов.

Персистентность

Коллекции объектов данных, как правило, хранятся в виде коллекций Java-объектов, таких, как набор (Set) и список (List). Поддерживаются обобщенные классы (Generics), введеные в Java 5. Hibernate может быть настроен на «ленивые» (отложенные) загрузки коллекций. Отложенные загрузки является вариантом по умолчанию, начиная с Hibernate 3.

Связанные объекты могут быть настроены на каскадные операции. Например, родительский класс Album (музыкальный альбом) может быть настроен на каскадное сохранение и/или удаление своего потомка Track. Это может сократить время разработки и обеспечить целостность. Функция проверки изменения данных (dirty checking) позволяет избежать ненужной записи действий в базу данных, выполняя SQL-обновление только при изменении полей персистентных объектов.

Успех библиотеки Hibernate подтолкнул JCP к разработке спецификации JDO, ставшей одной из стандартных технологий ORM на платформе JavaEE. Также Hibernate совместима с JSR-220/317 и предоставляет стандартные средства JPA.

HQL

Hibernate обеспечивает использование SQL-подобного языка Hibernate Query Language (HQL), который позволяет выполнять SQL-подобные запросы, записанные рядом с объектами данных Hibernate. Запросы критериев предоставляются как Объектно-ориентированная альтернатива к HQL.

Интеграция

Hibernate может использоваться как в самостоятельных приложениях Java, так и в программах Java EE, выполняемых на сервере (например, сервлет или компоненты EJB). Также он может включаться как дополнительная возможность к другим языкам программирования. Например, Adobe интегрировал Hibernate в девятую версию ColdFusion (запускаемый на серверах с поддержкой приложений J2EE) с уровнем абстракции новых функций и синтаксиса, приложенных к CFML.

Компоненты

Hibernate ORM (до версии 4.1 называлось Hibernate Core[2]) — ядро Hibernate, собственный API, xml-мэппинг (отображение) метаданных объектов (поддержка метаданных в виде аннотаций с версии 3.6)[3]

Hibernate Annotations (с версии 3.6 объединены с Hibernate Core/ORM) — отображение (мэппинг) с помощью аннотаций JDK 5.0, как стандартных для JPA, так и собственных расширений[4]

Hibernate EntityManager — реализация Java Persistence API для Java SE и Java EE[5]

Hibernate Envers — аудит persistent-классов[6] Hibernate OGM — Object/Grid Mapper — расширение для хранения данных в хранилище NoSQL[7]

Hibernate Shards — фреймворк для сегментирования баз данных — архитектурного решения по горизонтальному масштабированию с разбиением таблиц баз данных на сегменты по некоторому признаку без общих ресурсов[8]

Hibernate Validator — аннотации и API для проверки верности и целостности данных

Hibernate Search — интеграция Hibernate с поисковой системой Lucene, с целью индексирования и поиска данных

Hibernate Tools — средства разработки для Eclipse и Ant

Hibernate Metamodel Generator — обработчик аннотаций, создающий классы статической метамодели JSR 317 Java Persistence API (JPA 2), используя при этом JSR 269 Pluggable Annotation Processing API[9]

История версий

Версия 1.0 выпущена в июле 2002 года, через год вышла версия 2.0, ещё через год — 3.0. В выпуске от 16 октября 2006 появились Hibernate Core, Annotations, Entity Manager (версия 3.2.0.GA с поддержкой JPA). В декабре 2013 года выпущен Hibernate ORM 4.3.0. В сентябре 2015 выпущен Hibernate ORM 5.0.2.

См. также

Примечания

  1. Рекомендации по использованию методов equals() и hashCode() в Hibernate (англ.) (недоступная ссылка). Дата обращения: 20 августа 2009. Архивировано 6 декабря 2003 года.
  2. О причине смены названия Hibernate Core -> Hibernate ORM. Дата обращения: 5 марта 2015. Архивировано 18 марта 2015 года.
  3. HIBERNATE - Relational Persistence for Idiomatic Java (недоступная ссылка). JBoss Community. Архивировано 17 февраля 2012 года.
  4. Hibernate Annotations (недоступная ссылка). JBoss Community. Архивировано 17 февраля 2012 года.
  5. Hibernate EntityManager (недоступная ссылка). JBoss Community. Архивировано 17 февраля 2012 года.
  6. Hibernate Envers – Easy Entity Auditing (недоступная ссылка). JBoss Community. Архивировано 17 февраля 2012 года.
  7. Hibernate OGM (недоступная ссылка). JBoss Community. Архивировано 17 февраля 2012 года.
  8. Гловер, Эндрю. Java development 2.0: Вторая волна разработки Java-приложений: Шардинг средствами Hibernate Shards (недоступная ссылка) (27 февраля 2012). Архивировано 19 июля 2013 года.
  9. Hibernate Metamodel Generator (недоступная ссылка). JBoss Community. Архивировано 17 февраля 2012 года.

Литература

  • К. Бауэр, Г. Грегори, Г. Кинг. Java Persistence API и Hibernate = Java Persistence with Hibernate. — 2-е. — ДМК Пресс, 2017. — 632 с. — ISBN 978-5-97060-180-8.
  • Elliott, James. Hibernate: A Developer's Notebook. — 1st ed. — O'Reilly Media, 2004, May 10. — 190 p. — ISBN 0-596-00696-9, ISBN 978-0-596-55653-2 (e-book), ISBN 0-596-55653-5 (e-book).
Одна из первых книг по Hibernate, написанная опытным разработчиком из Singlewire Software, работавшим с объектно-ориентированными технологиями задолго до того, как это стало популярным.
  • Bauer, Christian, King, Gavin. Hibernate In Action. — 1st ed. — Greenwich: Manning Publications, 2004, August 1. — 408 p. — (In Action). — ISBN 1-932394-15-X, ISBN 978-1-932394-15-3.
Christian Bauer — участник команды разработки Hibernate, Gavin King — основатель проекта Hibernate, участник экспертной группы EJB 3.0 (JSR 220), руководитель в разработке стандарта Web Beans JSR 299, включающего концепции Hibernate, JSF и EJB 3.0. Книга описывает устаревшую версию Hibernate 2.x. Считается одной из лучших по отзывам критиков
  • Bauer, Christian, King, Gavin. Java Persistence with Hibernate / Foreword by Linda DeMichiel. — 1st ed. — Greenwich: Manning Publications, 2006, November 24. — 904 p. — ISBN 1-932394-88-5, ISBN 978-1-932394-88-7.
Фактически это обновлённая и пересмотренная версия книги «Hibernate in Action», здесь описывается Hibernate 3.x и JPA. Второе издание этой книги, описывающее Hibernate 5, запланировано к выходу в начале 2015 г. (отдельные главы выложены в электронном виде с марта 2013)
  • Elliott, James, O'Brien, Timothy M., Fowler, Ryan. Harnessing Hibernate. — 1st ed. — O'Reilly Media, 2008, April 22. — 382 p. — ISBN 978-0-596-51772-4, ISBN 0-596-51772-6, ISBN 978-0-596-15948-1 (e-book), ISBN 0-596-15948-X (e-book).
  • Bernard, Emmanuel, Griffin, John. Hibernate Search in Action. — 1st ed. — Manning Publications, 2008, December 30. — 488 p. — (In Action). — ISBN 1-933988-64-9.

Ссылки