Спящий режим (фреймворк)

Инструмент объектно-реляционного отображения
Спящий режим ORM
Разработчик(и)Красная Шапочка
Первоначальный выпуск23 мая 2001 г. ; 23 года назад ( 2001-05-23 )
Стабильный релиз
6.4.4.Final / 8 февраля 2024 г. ; 9 месяцев назад [1] ( 2024-02-08 )
Репозиторий
  • github.com/hibernate/hibernate-orm
Написано вЯва
Операционная системаКроссплатформенность ( JVM )
ПлатформаВиртуальная машина Java
ТипОбъектно-реляционное отображение
ЛицензияСтандартная общественная лицензия ограниченного применения GNU
Веб-сайтhibernate.org/orm/

Hibernate ORM (или просто Hibernate ) — это объектно-реляционный инструмент отображения [2] : §1.2.2, [12]  для языка программирования Java . Он предоставляет фреймворк для отображения объектно-ориентированной модели домена в реляционную базу данных . Hibernate обрабатывает проблемы несоответствия объектно-реляционного импеданса , заменяя прямые, постоянные доступы к базе данных высокоуровневыми функциями обработки объектов.

Hibernate — это свободное программное обеспечение , распространяемое по лицензии GNU Lesser General Public License 2.1.

Основная функция Hibernate — отображение классов Java в таблицы базы данных и отображение типов данных Java в типы данных SQL . Hibernate также предоставляет возможности запроса и извлечения данных. Он генерирует вызовы SQL и освобождает разработчика от ручной обработки и преобразования объектов набора результатов.

Картографирование

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

Предоставляются возможности для организации отношений «один ко многим» и «многие ко многим» между классами. [2] : 140–171  Помимо управления ассоциациями между объектами, Hibernate также может управлять рефлексивными ассоциациями, в которых объект имеет отношение «один ко многим» с другими экземплярами типа класса .

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

  • Переопределение типа SQL по умолчанию при сопоставлении столбца со свойством.
  • Отображение перечислений Java в столбцы, как если бы они были обычными свойствами. [2] : 89–90 
  • Сопоставление одного свойства с несколькими столбцами.

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

Сопоставление информирует инструмент ORM о том, какой объект класса Java следует хранить в той или иной таблице базы данных.

Язык запросов Hibernate (HQL)

Hibernate предоставляет вдохновленный SQL язык, называемый Hibernate Query Language (HQL), для написания SQL-подобных запросов к объектам данных Hibernate. Criteria Queries предоставляются как объектно-ориентированная альтернатива HQL. Criteria Query используется для изменения объектов и предоставления ограничений для объектов. [2] : 347–349  HQL (Hibernate Query Language) — это объектно-ориентированная версия SQL. Он генерирует независимые от базы данных запросы, поэтому нет необходимости писать запросы, специфичные для базы данных. Без этой возможности изменение базы данных потребовало бы также изменения отдельных SQL-запросов, что привело бы к проблемам обслуживания.

Упорство

Hibernate обеспечивает прозрачное сохранение для обычных старых объектов Java (POJO). [2] : 37–38  Единственным строгим требованием для постоянного класса является конструктор без аргументов , [2] : 39  хотя и не обязательно public. Правильное поведение в некоторых приложениях также требует особого внимания к методам equals(Object obj)и hashCode() в Objectклассах. [3] Hibernate рекомендует предоставлять атрибут идентификатора, и это планируется сделать обязательным требованием в будущем выпуске. [4]

Коллекции объектов данных обычно хранятся в классах коллекций Java, таких как реализации интерфейсов Setи List . Также поддерживаются дженерики Java , представленные в Java 5. Hibernate можно настроить на ленивую загрузку связанных коллекций. [2] : 289–293  Ленивая загрузка используется по умолчанию в Hibernate 3.

Связанные объекты могут быть настроены на каскадирование операций от одного объекта к другому. Например, Albumобъект родительского класса может быть настроен на каскадирование своих операций saveи к своим объектам дочернего класса.deleteTrack

Интеграция

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

Сущности и компоненты

На жаргоне Hibernate сущность — это автономный объект в постоянном механизме Hibernate, которым можно манипулировать независимо от других объектов. [2] : 62–74  Напротив, компонент подчиняется сущности и может манипулироваться только по отношению к этой сущности. Например, объект Album может представлять сущность; но объект Tracks, связанный с объектами Album, будет представлять компонент сущности Album, если предполагается, что Tracks можно сохранять или извлекать из базы данных только через объект Album. В отличие от J2EE, Hibernate может переключать базы данных.

История

Hibernate был создан в 2001 году Гэвином Кингом с коллегами из Cirrus Technologies в качестве альтернативы использованию компонентов сущностей в стиле EJB2. Первоначальной целью было предложить лучшие возможности сохранения, чем те, которые предлагает EJB2; путем упрощения сложностей и дополнения некоторых недостающих функций.

В начале 2003 года команда разработчиков Hibernate начала выпуск Hibernate2, который предлагал множество существенных улучшений по сравнению с первым выпуском.

Позднее компания JBoss, Inc. (теперь часть Red Hat ) наняла ведущих разработчиков Hibernate для дальнейшего развития своей платформы.

В 2005 году была выпущена версия Hibernate 3.0. Ключевые особенности включали новую архитектуру Interceptor/Callback, определяемые пользователем фильтры и аннотации JDK 5.0 (функция метаданных Java ). По состоянию на 2010 год [обновлять]Hibernate 3 (версия 3.5.0 и выше) был сертифицированной реализацией спецификации Java Persistence API 2.0 через оболочку для модуля Core, которая обеспечивает соответствие стандарту JSR 317. [5]

В декабре 2011 года был выпущен Hibernate Core 4.0.0 Final. Он включает в себя новые функции, такие как поддержка многопользовательской аренды, введение ServiceRegistry (серьезное изменение в том, как Hibernate создает и управляет «сервисами»), улучшенное открытие сеанса из SessionFactory, улучшенная интеграция через org.hibernate.integrator.spi.Integrator и автоматическое обнаружение, поддержка интернационализации , коды сообщений в журнале и большее различие между API, SPI или классами реализации. [6]

В декабре 2012 года был выпущен Hibernate ORM 4.1.9 Final. [7]

В марте 2013 года был выпущен Hibernate ORM 4.2 Final. [8]

В декабре 2013 года был выпущен Hibernate ORM 4.3.0 Final. [9] Он включает Java Persistence API 2.1 .

В сентябре 2015 года вышел Hibernate ORM 5.0.2 Final. Он улучшил bootstrapping, hibernate-java8, hibernate-spatial, поддержку Karaf.

В ноябре 2018 года вышел Hibernate ORM 5.1.17 Final. Это финальный релиз серии 5.1.

В октябре 2018 года вышел Hibernate ORM 5.3 Final. В нем реализовано кэширование наследования Java Persistence API 2.2 .

В декабре 2018 года был выпущен Hibernate ORM 5.4.0 Final. [10]

В октябре 2022 года был выпущен Hibernate ORM 6.1.4 Final. [11]

Интерфейс прикладного программирования

API Hibernate предоставляется в пакете Java org.hibernate . [12]

Интерфейс org.hibernate.SessionFactory

Интерфейс org.hibernate.SessionFactoryявляется собственной эквивалентной версией стандарта JPA EntityManagerFactory. [2] : 26 

Интерфейс org.hibernate.Session

Интерфейс [13]org.hibernate.Session представляет собой сеанс Hibernate, т. е. основную точку манипуляции, выполняемой над сущностями базы данных. Последние действия включают (помимо прочего) управление состоянием сохранения ( транзиентное , сохраняющееся , отсоединенное [ требуется разъяснение ] ) объектов, извлечение сохраняющихся из базы данных и управление разграничением транзакций [ требуется разъяснение ] .

A Sessionпредназначен для длительности логической транзакции в базе данных. Из-за последней особенности Sessionреализации не должны быть потокобезопасными или использоваться несколькими клиентами.

Компоненты программного обеспечения

Программное обеспечение Hibernate включает в себя следующие компоненты: [14]

  • Hibernate ORM (до версии 4.1 известный как Hibernate Core [15] ) – базовое программное обеспечение для решения объектно-реляционного отображения для сред Java [16]
  • Аннотации Hibernate (объединены в Hibernate Core/ORM с версии 3.6 [17] ) — метаданные, которые управляют преобразованием данных между объектно-ориентированной моделью и моделью реляционной базы данных в соответствии с JSR 317 Java Persistence API (JPA 2) [18]
  • Hibernate EntityManager (объединен с Hibernate Core/ORM с версии 5.2 [19] ) – вместе с Hibernate Annotations, оболочкой, реализующей решение по сохранению JSR 317 Java Persistence API (JPA 2) [20]
  • Hibernate Envers – аудит и управление версиями постоянных классов [21]
  • Hibernate OGM (Object/Grid Mapper) – расширение для хранения данных в хранилище NoSQL [22]
  • Hibernate Shards – горизонтальное разбиение на разделы для нескольких реляционных баз данных [23]
    • Хотя Hibernate Shards несовместим с версиями Hibernate Core 4.x, некоторые возможности Shards были интегрированы в Core в версии 4.0.
  • Hibernate Search – интегрирует функциональность полнотекстовой библиотеки Apache Lucene в модель Hibernate и JPA [24]
  • Hibernate Tools – набор инструментов, реализованный в виде набора плагинов Eclipse и задач Ant , включенных в JBoss Developer Studio [25]
  • Hibernate Validator – эталонная реализация JSR 303 Bean Validation [26] [2] : 49–51 
  • Hibernate Metamodel Generator – процессор аннотаций, который создает статические классы метамодели JSR 317 Java Persistence API (JPA 2) с использованием подключаемого API обработки аннотаций JSR 269 [27]
  • NHibernate – решение объектно-реляционного отображения для .NET Framework [28]

Смотрите также

Ссылки

  1. ^ "Hibernate Hibernate ORM 6.4.4.Final выпущен" . Получено 8 февраля 2024 г. .
  2. ^ abcdefghij Бауэр, Кинг и Грегори 2015.
  3. ^ "Equals and HashCode". Сообщество JBoss. Архивировано из оригинала 2013-12-16 . Получено 2013-12-16 .
  4. ^ "Руководство пользователя Hibernate: 2.5.5. Предоставление атрибута идентификатора". Сообщество JBoss.
  5. ^ "Hibernate 3.5.0-Final release". В связи с...
  6. ^ "Релизы - Hibernate ORM". hibernate.org .
  7. ^ "In Relation To... Hibernate ORM 4.1.9.Final Released". Архивировано из оригинала 2013-01-29 . Получено 2012-12-13 .
  8. ^ "GC: Hibernate-core-4.2.0.Final.jar - GrepCode Java Project Source". Архивировано из оригинала 2014-12-05 . Получено 2014-11-27 .
  9. ^ "GC: Hibernate-core-4.3.0.Final.jar - GrepCode Java Project Source". Архивировано из оригинала 2014-12-05 . Получено 2014-11-27 .
  10. ^ "Релизы - Hibernate ORM". hibernate.org .
  11. ^ Борьеро, Андреа. "Hibernate ORM 6.1.4.Final выпущен". В связи с . Получено 2022-10-11 .
  12. ^ "Hibernate JavaDocs". docs.jboss.org .
  13. ^ "Сессия (Hibernate JavaDocs)". docs.jboss.org .
  14. ^ "Hibernate: Реляционное сохранение для Java и .NET". Сообщество JBoss.
  15. ^ "Hibernate ORM 4.1.0 Release". Сообщество JBoss.
  16. ^ "HIBERNATE - Реляционное сохранение для идиоматической Java". Сообщество JBoss.
  17. ^ "Больше нет модуля hibernate-annotations". Сообщество JBoss.
  18. ^ "Аннотации Hibernate". Сообщество JBoss.
  19. ^ "hibernate-entitymanager объединен с hibernate-core". Сообщество JBoss.
  20. ^ "Hibernate EntityManager". Сообщество JBoss.
  21. ^ "Hibernate Envers – простой аудит сущностей". Сообщество JBoss.
  22. ^ "Hibernate OGM". Сообщество JBoss.
  23. ^ "Hibernate Shards". Сообщество JBoss.
  24. ^ "Hibernate Search". Сообщество JBoss.
  25. ^ "Инструменты Hibernate для Eclipse и Ant". Сообщество JBoss.
  26. ^ "Hibernate Validator". Сообщество JBoss.
  27. ^ "Hibernate Metamodel Generator". Сообщество JBoss.
  28. ^ "NHibernate". NHibernate Forge. Архивировано из оригинала 2012-07-12 . Получено 2011-04-26 .

Библиография

  • Линвуд, Ананда; Минтер, Дэйв (28 мая 2010 г.), Beginning Hibernate (второе издание), Apress , стр. 400, ISBN 978-1-4302-2850-9, заархивировано из оригинала 5 декабря 2010 г. , извлечено 4 сентября 2010 г.
  • Бернард, Эммануэль; Гриффин, Джон (30 декабря 2008 г.), Hibernate Search in Action (первое издание), Manning Publications , стр. 488, ISBN 978-1-933988-64-1
  • Эллиотт, Джеймс; О'Брайен, Тим (22 апреля 2008 г.), Использование спящего режима (первое издание), O'Reilly Media , стр. 380, ISBN 978-0-596-51772-4
  • Бауэр, Кристиан; Кинг, Гэвин; Грегори, Гэри (8 ноября 2015 г.). Сохранение Java с помощью Hibernate . Manning Publications . ISBN 1-61729-045-9.
  • Линвуд, Джефф; Минтер, Дэйв (25 августа 2006 г.), Beginning Hibernate: From Novice to Professional (Третье изд.), Apress , стр. 360, ISBN 1-59059-693-5, заархивировано из оригинала 24 декабря 2010 г. , извлечено 24 апреля 2009 г.
  • Минтер, Дэйв; Линвуд, Джефф (27 июня 2005 г.), Pro Hibernate 3 (первое издание), Apress , стр. 242, ISBN 1-59059-511-4
  • Айверсон, Уилл (2 декабря 2004 г.), Hibernate: Руководство разработчика J2EE (первое издание), Addison Wesley , стр. 384, ISBN 0-321-26819-9
  • Pugh, Eric; Gradecki, Joseph D. (8 октября 2004 г.), Professional Hibernate (Programmer to Programmer) (первое издание), Wrox , стр. 456, ISBN 0-7645-7677-1, заархивировано из оригинала 4 апреля 2009 г. , извлечено 26 апреля 2009 г.
  • Бауэр, Кристиан; Кинг, Гэвин (1 августа 2004 г.), Hibernate In Action (второе издание), Manning Publications , стр. 400, ISBN 1-932394-15-X
  • Джеймс, Эллиотт (10 мая 2004 г.), Hibernate: A Developer's Notebook (первое издание), O'Reilly Media , стр. 190, ISBN 0-596-00696-9
  • Официальный сайт
  • Спящий режим на GitHub
Взято с "https://en.wikipedia.org/w/index.php?title=Hibernate_(framework)&oldid=1239003124"