Hibernate
-
Медіафайли у Вікісховищі
Hibernate — засіб відображення між об'єктами та реляційними структурами (object-relational mapping, ORM) для платформи Java. Hibernate є вільним програмним забезпеченням, яке поширюється на умовах GNU Lesser General Public License. Hibernate надає легкий для використання каркас (фреймворк) для відображення між об'єктно-орієнтованою моделлю даних і традиційною реляційною базою даних.
Основні можливості
Метою Hibernate є звільнення розробника від значних типових завдань із програмування взаємодії з базою даних. Розробник може використовувати Hibernate як при розробці з нуля, так і для вже існуючої бази даних.
Hibernate піклується про зв'язок класів з таблицями бази даних (і типів даних мови програмування із типами даних SQL), і надає засоби автоматичної побудови SQL запитів й зчитування/запису даних, і може значно зменшити час розробки, який зазвичай витрачається на ручне написання типового SQL і JDBC коду. Hibernate генерує SQL виклики і звільняє розробника від ручної обробки результуючого набору даних, конвертації об'єктів і забезпечення сумісності із різними базами даних.
Hibernate забезпечує прозору підтримку збереження даних, тобто їхньої персистентності (англ. persistence) для «POJO»-об'єктів, себто для звичайних Java-об'єктів; єдина сувора вимога до класу, що зберігається — конструктор за умовчанням (Для коректної поведінки у деяких застосуваннях потрібно приділити особливу увагу до методів equals() і hashCode()[1] [Архівовано 6 грудня 2003 у Wayback Machine.]).
Mapping
Mapping (зіставлення, буквально — картування) Java класів з таблицями бази даних здійснюється за допомогою конфігураційних XML файлів або Java анотацій. При використанні файлу XML, Hibernate може генерувати скелет вихідного коду для класів тривалого зберігання (persistent). У цьому немає необхідності, якщо використовується анотація. Hibernate може використовувати файл XML або анотації для підтримки схеми бази даних.
Забезпечуються можливості з організації відношення між класами «один-до-багатьох» і «багато-до-багатьох». На додаток до управління зв'язками між об'єктами, Hibernate також може керувати рефлексивними асоціаціями, де об'єкт має зв'язок «один-до-багатьох» з іншими примірниками свого власного типу даних.
Hibernate підтримує відображення користувацьких типів значень. Це робить можливим такі сценарії:
- Перевизначення типу за умовчанням SQL, який Hibernate вибирає при відображенні стовпчика властивості.
- Картування перераховуваного типу Java до колонок БД, так ніби вони є звичайними властивостями.
- Картування однієї властивості в декілька колонок.
Персистентність
Hibernate забезпечує прозоре збереження POJO (Plain Old Java Objects — простих старих об'єктів Java). Єдина сувора вимога для персистентного класу — конструктор без аргументів, не обов'язково публічний. Для правильної поведінки деяких програм також потрібна особлива увага до методів equals() і hashCode().[1]
Колекції об'єктів даних, як правило, зберігаються у вигляді колекцій 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 [Архівовано 27 жовтня 2007 у Wayback Machine.] — ядро Hibernate для Java, власний API та метадані відображення у форматі XML
- Hibernate Annotations [Архівовано 29 жовтня 2007 у Wayback Machine.] — відображення за допомогою аннотацій JDK 5.0, як стандартних для JPA, так і власних розширень
- Hibernate EntityManager [Архівовано 29 жовтня 2007 у Wayback Machine.] — реалізація Java Persistence API для Java SE і Java EE
- 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
- NHibernate — NHibernate сервіс для .NET платформи
- 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 [Архівовано 3 грудня 2007 у Wayback Machine.] — друге видання Hibernate in Action, описує Hibernate 3.x і JPA
- Hibernate in Action [Архівовано 26 грудня 2007 у Wayback Machine.], написана авторами Hibernate, описує версію 2.x.
Аналоги на інших платформах
- NHibernate — аналогічне рішення для платформи .NET
- ↑ [Http: / / www.hibernate.org/109.html Так само і хеш-код]