Hibernate — это бесплатная Java библиотека с открытым исходным кодом, представляющая собой инструмент объектно-реляционного отображения (object-relational mapping — ORM). Его основной задачей является преобразование данных реляционнной БД в объектно-ориентированные модели и обратно. Помимо этого фреймворк также предоставляет средства для автоматического построения запросов, поиска и извлечения данных.
Целью Hibernate является освобождение разработчика от 95-ти процентов выполнения задач по обеспечению хранения объектов в реляционной базе данных. Hibernate может быть не лучшим решением для приложений, в которых бизнес логика построена на вызове хранимых процедур при работе с БД. Он будет более полезен для приложений, в которых обработка данных выполняется, скажем так, на среднем уровне, с использованием объектно-ориентированных моделей.
Hibernate может быть с легкостью внедрен на любой стадии проекта, его можно использовать как в процессе проектирования классов и таблиц, так и для работы с уже существующей базой данных.
Основные достоинства:
- природная модель программирования: фреймворк позволяет разрабатывать классы следуя особенностям объектно-ориентированного языка: наследования, полиморфизма, а также, ассоциаций и коллекций Java;
- прозрачное сохранение POJO (Plain Old Java Objects — простых старых объектов Java): Hibernate не требует никаких особых интерфейсов или базовых классов для создания персистентного класса и его связи с таблицами в БД. Абсолютно любой класс или структура может выступить в этой роли;
- высокая производительность: Hibernate поддерживает «ленивую» инициализацию и множество стратегий выборок. Он не требует наличия специальных таблиц или полей в базе данных и генерирует большую часть SQL кода во время инициализации системы, а не во время выполнения. Hibernate обычно обеспечивает превосходную производительность по сравнению с прямым JDBC-кодом.
- надежность и масштабируемость: Hibernate хорошо известен своими отличными качеством и стабильностью, проверенными использованием десятками тысяч Java-разработчиков. Он был разработан, чтобы работать в кластере сервера приложений и предоставлять высокую масштабируемость архитектуры.
- расширяемость: библиотека Hibernate является легко настраиваемой и расширяемой.
- всесторонние возможности построения запросов: поддержка Hibernate Query Language (HQL), Java Persistence Query Language (JPAQL), критериев запросов, и «родного» SQL.
К недостаткам библиотеки можно отнести следующее:
- некоторая сложность в использовании, особенно в начале работы, в виду большого количества свойств и настроек;
- плохо подходит для выборок объемных данных и построения сложных нетривиальных запросов;
- очень мало грамотных примеров и документации по использованию и тонкостям при работе с фреймворком.