Hibernate (библиотека)
| Hibernate | |
![]() |
|
| Тип | |
|---|---|
| Разработчик | |
| Написана на | |
| Аппаратная платформа | |
| Последняя версия | |
| Лицензия | |
| Сайт | |
Hibernate — библиотека для языка программирования Java, предназначенная для решения задач объектно-реляционного проецирования (object-relational mapping — ORM). Она представляет собой свободное программное обеспечение с открытым исходным кодом (open source), распространяемое на условиях GNU Lesser General Public License. Данная библиотека предоставляет лёгкий в использовании каркас (фреймворк) для отображения объектно-ориентированной модели данных в традиционные реляционные базы данных.
Содержание |
[править] Основные возможности
Целью Hibernate является освобождение разработчика от значительного объёма сравнительно низкоуровнего программирования по обеспечению хранения объектов в реляционной базе данных. Разработчик может использовать Hibernate как в процессе проектирования системы классов и таблиц «с нуля», так и для работы с уже существующей базой данных.
Hibernate не только решает задачу связи классов Java с таблицами базы данных (и типов данных Java с типами данных SQL), но также предоставляет средства для автоматической генерации и обновления набора таблиц, построения запросов и обработки полученных данных и может значительно уменьшить время разработки, которое обычно тратится на ручное написание SQL- и JDBC-кода. Hibernate автоматизирует генерацию SQL-запросов и освобождает разработчика от ручной обработки результирующего набора данных и преобразования объектов, максимально облегчая перенос (портирование) приложения на любые базы данных SQL.
Hibernate обеспечивает прозрачную поддержку сохранности данных (persistence) для «POJO» (то есть для стандартных Java-объектов); единственное строгое требование для сохраняемого класса — наличие конструктора по умолчанию (без параметров). Для корректного поведения в некоторых приложениях требуется также уделить внимание методам equals() и hashCode()[1].
[править] Mapping
Mapping (сопоставление, буквально — картирование) Java классов с таблицами базы данных осуществляется с помощью конфигурационных XML файлов или Java аннотаций. При использовании файла XML, Hibernate может генерировать скелет исходного кода для классов длительного хранения (persistent). В этом нет необходимости, если используется аннотация. Hibernate может использовать файл XML или аннотации для поддержки схемы базы данных.
Обеспечиваются возможности по организации отношения между классами «один-ко-многим» и «многие-ко-многим». В дополнение к управлению связями между объектами, Hibernate также может управлять рефлексивными отношениями, где объект имеет связь «один-ко-многим» с другими экземплярами своего собственного типа данных.
Hibernate поддерживает отображение пользовательских типов значений. Это делает возможным такие сценарии:
- Переопределение типа по умолчанию SQL, Hibernate выбирает при отображении столбца свойства.
- Картирование перечисляемого типа Java до колонок БД, будто они являются обычными свойствами.
- Картирование одного свойства в несколько колонок.
[править] Персистентность
Hibernate обеспечивает прозрачное сохранение POJO (Plain Old Java Objects — простых старых объектов Java). Единственное строгое требование для персистентной класса — конструктор без аргументов, не обязательно публичный. Для правильного поведения некоторых программ также требуется особое внимание к методам equals() и hashCode().[2]
Коллекции объектов данных, как правило, хранятся в виде коллекций Java-объектов, таких как набор (Set) и список (List). Поддерживаются обобщенные классы (Generics), введены в Java 5. Hibernate может быть настроен на «ленивые» (отложенные) загрузки коллекций. Отложенные загрузки является вариантом по умолчанию, начиная с Hibernate 3.
Связанные объекты могут быть настроены на каскадные операции. Например, родительский класс, Album (музыкальный альбом), может быть настроен на каскадное сохранения и/или удаление своего отпрыска Track. Это может сократить время разработки и обеспечить целостность. Функция проверки изменения данных (dirty checking) позволяет избежать ненужной записи действий в базу данных, выполняя SQL обновление только при изменении полей персистентных объектов.
[править] Язык запросов Hibernate (HQL)
Hibernate обеспечивает использование SQL-подобного языка Hibernate Query Language (HQL), который позволяет выполнять SQL-подобные запросы, записанные рядом с объектами данных Hibernate. Запросы критериев предоставляются как Объектно-ориентированная альтернатива к HQL.
[править] Интеграция
Hibernate может использоваться как в самостоятельных приложениях Java, так и в программах Java EE, выполняемых на сервере (например, сервлет и или EJB session beans). Также он может включаться как дополнительная возможность к другим языкам программирования. Например, Adobe интегрировал Hibernate в девятую версию ColdFusion (запускаемый на серверах с поддержкой приложений J2EE) с уровнем абстракции новых функций и синтаксиса, приложенных к CFML.
[править] Компоненты
- Hibernate Core — ядро Hibernate для Java, собственный API и метаданные отражение в формате XML[3]
- Hibernate Annotations — отображение с помощью аннотаций JDK 5.0, как стандартных для JPA, так и собственных расширений[4]
- Hibernate EntityManager — реализация Java Persistence API для Java SE и Java EE[5]
- Hibernate Envers — auditing and versioning of persistent classes[6]
- Hibernate OGM — Object/Grid Mapper is an extension to store data in a NoSQL store[7]
- Hibernate Shards — Horizontal data partitioning framework
- Hibernate Validator — Data integrity annotations and validation API
- Hibernate Search — Hibernate integration with Lucene for indexing and querying data
- Hibernate Tools — Средства разработки для Eclipse и Ant
- Hibernate Metamodel Generator — an annotation processor that creates JSR 317 Java Persistence API (JPA 2) static metamodel classes using the JSR 269 Pluggable Annotation Processing API[8]
- NHibernate — NHibernate сервис для .NET-платформы[9]
- JBoss Seam — Каркас для JSF, Ajax, и EJB 3.0/Java EE 5.0 приложений
[править] История
- Июль 2002 — версия 1.0
- Июнь 2003 — версия 2.0
- 31 марта 2005 — версия 3.0
- 16 октября 2006 — Hibernate Core, Annotations, Entity Manager 3.2.0.GA — поддержка JPA
- 19 марта 2007 — Hibernate Validator 3.0.0.GA
- 23 сентября 2007 — Hibernate Search 3.0.0.GA
[править] Литература
- Java Persistence with Hibernate — второе издание Hibernate in Action, описывает Hibernate 3.x и JPA
- Hibernate in Action, написана авторами Hibernate, описывает версию 2.x.
[править] Аналоги на других платформах
- NHibernate — аналогичное решение для платформы .NET
Hibernate используется как в standalone Java-приложениях, так и в приложениях на платформе Java EE, использующих сервлеты или EJB.
[править] См. также
- Сериализация
- Enterprise JavaBeans 3.0
- NHibernate — порт Hibernate на платформу .NET
- MyBatis
- iBATIS
[править] Примечания
- ↑ Рекомендации по использованию методов equals() и hashCode() в Hibernate (англ.). Проверено 20 августа 2009.
- ↑ Так же и хэш-код
- ↑ HIBERNATE - Relational Persistence for Idiomatic Java. JBoss Community.
- ↑ Hibernate Annotations. JBoss Community.
- ↑ Hibernate EntityManager. JBoss Community.
- ↑ Hibernate Envers – Easy Entity Auditing. JBoss Community.
- ↑ Hibernate OGM. JBoss Community.
- ↑ Hibernate Metamodel Generator. JBoss Community.
- ↑ NHibernate. NHibernate Forge.
[править] Ссылки
|
|
|
|---|---|
| Cayenne · DataNucleus · EasyBeans · EclipseLink · Hibernate · TopLink · OpenEJB · OpenJPA |
|
|
|
|---|---|
| Платформы | |
| Технологии Sun |
Java • Java Development Kit • OpenJDK • WTK • Java Virtual Machine • JavaFX • JAXP • Squawk |
| Основные сторонние технологии |
GNU Classpath • GNU компилятор для Java • Kaffe • TopLink • Apache Harmony • Apache Struts • Spring Framework • Hibernate • JBoss • Processing • Dozer • AspectJ |
| История | |
| Свойства языка |
Байткод • Синтаксис • Апплеты • Сервлеты • Мидлеты • JavaServer Pages • Web Start • Enterprise JavaBeans |
| Скриптовые языки |
Java Tcl • Jython • JRuby • BeanShell • Groovy • Judoscript • Sleep • Bean Scripting Framework • Yoix • Rhino |
| Конференции Java | |
