Hibernate (библиотека)
Hibernate — библиотека для языка программирования Java, предназначенная для решения задач объектно-реляционного отображения (ORM), самая популярная реализация спецификации JPA. Распространяется свободно на условиях GNU Lesser General Public License.
Hibernate | |
---|---|
Тип | ORM, слой доступа к данным, слой абстракции баз данных, фреймворк обеспечения персистентности[d], фреймворк и библиотека Java[d] |
Разработчик | Red Hat |
Написана на | Java |
Первый выпуск | 2001 |
Аппаратная платформа | Java Virtual Machine |
Последняя версия | |
Лицензия | GNU LGPL |
Сайт | hibernate.org |
Медиафайлы на Викискладе |
Позволяет сократить объёмы низкоуровневого программирования при работе с реляционными базами данных; может использоваться как в процессе проектирования системы классов и таблиц «с нуля», так и для работы с уже существующей базой.
Библиотека не только решает задачу связи классов Java с таблицами базы данных (и типов данных Java с типами данных SQL), но и также предоставляет средства для автоматической генерации и обновления набора таблиц, построения запросов и обработки полученных данных и может значительно уменьшить время разработки, которое обычно тратится на ручное написание SQL- и JDBC-кода. Hibernate автоматизирует генерацию SQL-запросов и освобождает разработчика от ручной обработки результирующего набора данных и преобразования объектов, максимально облегчая перенос (портирование) приложения на любые базы данных SQL.
Hibernate обеспечивает прозрачную поддержку сохранности данных (persistence) для «POJO» (то есть для стандартных Java-объектов); единственное строгое требование для сохраняемого класса — наличие конструктора по умолчанию (без параметров). Для корректного поведения в некоторых приложениях требуется также уделить внимание методам equals()
и hashCode()
[1].
Существует порт библиотеки для .NET — NHibernate. Альтернативные 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.
См. такжеПравить
ПримечанияПравить
- ↑ Рекомендации по использованию методов equals() и hashCode() в Hibernate (англ.). Дата обращения: 20 августа 2009. Архивировано из оригинала 6 декабря 2003 года.
- ↑ О причине смены названия Hibernate Core -> Hibernate ORM (неопр.). Дата обращения: 5 марта 2015. Архивировано 18 марта 2015 года.
- ↑ HIBERNATE - Relational Persistence for Idiomatic Java (неопр.) (недоступная ссылка — история). JBoss Community. Архивировано 17 февраля 2012 года.
- ↑ Hibernate Annotations (неопр.) (недоступная ссылка — история). JBoss Community. Архивировано 17 февраля 2012 года.
- ↑ Hibernate EntityManager (неопр.) (недоступная ссылка — история). JBoss Community. Архивировано 17 февраля 2012 года.
- ↑ Hibernate Envers – Easy Entity Auditing (неопр.) (недоступная ссылка — история). JBoss Community. Архивировано 17 февраля 2012 года.
- ↑ Hibernate OGM (неопр.) (недоступная ссылка — история). JBoss Community. Архивировано 17 февраля 2012 года.
- ↑ Гловер, Эндрю. Java development 2.0: Вторая волна разработки Java-приложений: Шардинг средствами Hibernate Shards (неопр.) (недоступная ссылка — история) (27 февраля 2012). Архивировано 19 июля 2013 года.
- ↑ 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)
- Linwood, Jeff, Minter, Dave. Beginning Hibernate: From Novice to Professional. — 3rd ed. — Apress, 2006, August 25. — 360 p. — ISBN 1-59059-693-5. Архивная копия от 24 декабря 2010 на Wayback Machine
- Linwood, Jeff, Minter, Dave. Beginning Hibernate. — 2nd ed. — Apress, 2010, May 28. — 400 p. — ISBN 1-4302-2850-4. Архивная копия от 5 декабря 2010 на Wayback Machine
- 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.
СсылкиПравить
- Официальный сайт Hibernate (англ.)