Использование Hibernate Java Persistence

0

Сергей Бердачук http://www.berdaflex.com
Не секрет, что данные являются основой практически для любого проекта. На основе требований к программной системе строится модель данных. В дальнейшем именно с данной моделью работает программа, вводится некоторая информация, производятся вычисления, формируются отчеты и т. д. В процессе развития программных систем проектировались и используются различные системы управления базами данных (СУБД), иерархические, реляционные, объектные и др.

На практике наибольшую популярность получили именно реляционные модели баз данных, хотя в современных методологиях программирования пользуется популярностью объектно-ориентированное программирование. Для стыковки данных технологий разработано множество технологий, спецификаций и фреймворков для маппинга объектов на таблицы реляционных баз данных. Java разработчикам доступно множество технологий для работы с данными это может быть просто сереализация объектов, JDBC, JDO и множество других.
Но каждая из них имеет ряд достоинств и недостатков.

Таблица 1. Основные технологии хранения данных в java.

Поддержка Сериализация JDBC ORM ODB EJB2 JDO JPA

Java Объекты

Есть

Нет

Есть

Есть

Есть

Есть

Есть

Объектно ориентированный подход

Есть

Нет

Есть

Есть

Нет

Есть

Есть

Танзакционность

Нет

Есть

Есть

Есть

Есть

Есть

Есть

Параллелизм

Нет

Есть

Есть

Есть

Есть

Есть

Есть

Работа с наборами данных

Нет

Есть

Есть

Есть

Есть

Есть

Есть

Схема данных

Нет

Есть

Есть

Нет

Есть

Есть

Есть

Хранение данных в реляционном и нереляционном форматах

Нет

Нет

Нет

Нет

Есть

Есть

Нет

Поддержка запросов к данным

Нет

Есть

Есть

Есть

Есть

Есть

Есть

Переносимость и жесткие стандарты

Есть

Нет

Нет

Нет

Есть

Есть

Есть

Простота

Есть

Есть

Есть

Есть

Нет

Есть

Есть

  • Сериализация (Serialization) является встроенным механизмом хранения и передачи объектов в Java. Но для практической работы с данными данный подход мало пригоден, так как требуется извлекать и хранить весь граф объектов, что затрудняет работу с большими объемами данных.  
  • Java Database Connectivity (JDBC) API разрабатывался для работы с реляционными базами данных. Минусом данной технологии является отсутствие механизмов проекции реляционных данных на объекты, что существенно увеличивает объем кода для данного преобразования.
  • Object-relational mapping (ORM) представляет собой попытки различных поставщиков маппинга объектов на реляционные данные. Отсутствие стандартов привело к созданию множества реализаций данного подхода несовместимых друг с другом. Как результат код становится непереносимым и жестко завязаннм на конкретного поставщика.
  • Object databases (ODB) представляют собой объектные реализации баз
    данных. Как и в случае с ORM здесь множество реализаций несмотря на попытки Object Database Management Group (ODMG) создать и стандартизировать API для доступа к объектным базам данных.
  • Enterprise Java Beans (EJB) введены в Enterprise Edition платформе Java уровня предприятия. Сущности EJB 2 представляют собой компоненты для хранения в хранилищах данных. Данная технология позволяет работать с данными на уровне объектов. Варианты физического хранения данных не лимитированы только реляционными базами данных. К сожалению в стандарте EJB 2.x лимитирован объектно ориентированный подход. Это выражается в отсутствии или сложности реализации таких важных функций как наследование, полиморфизм и внешние связи объектов. Дополнительные проблемы возникают из-за необходимости применения
    дорогих и “тяжеловесных” серверов.
  • Спецификация JDO на текущий момент является одной из самых прогрессивных и
    позволяет использовать не только реляционные, но и объектные хранилища данных.
  • Java Persistence API (JPA) это результат работы JSR 220 Expert Group, сочетает в себе простоту сериализации объектов с возможностью работы с данными на уровне объектно-ориентированной модели. При этом остается возможность комбинирования доступа к данным как в JDBC на уровне реляционных данных, что позволяет порой достичь большей производительности и гибкости по сравнению с JDO.

На текущий момент существует множество реализаций спецификации JPA, как коммерческих, так и свободных с открытым исходным кодом(open source).