Главная » Spring » Интеграция Hibernate и Spring

0

Когда мы были детьми, езда на велосипеде была забавой, не так ли? С утра мы ехали в школу. После уроков отправлялись домой к лучшему другу. Когда же становилось поздно и родители начинали звать нас, ругаясь, что мы шляемся дотемна, мы стремглав мчались домой по темноте. Это были золотые деньки.

Затем, когда мы выросли, велосипеда стало слишком мало. Кому- то приходится преодолевать длинный путь от дома до работы. Нуж- но завезти продукты домой и отвезти детей на тренировку по фут- болу. А если вы еще и живете в Техасе, то без кондиционера это уже не жизнь! В общем, наши потребности просто переросли велосипед.

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

#  Отложенная  загрузка  (lazy loading) – иерархии наших объ-

ектов становятся все более сложными, поэтому иногда бывает нежелательно извлекать все дерево наследования немедленно. Например, представьте, что приложение выбирает коллекцию объектов PurchaseOrder, где каждый из этих объектов, в свою очередь, содержит коллекцию объектов LineItem. Если в дан-

ный момент приложению требуется получить только атрибу- ты объектов PurchaseOrder, нет смысла извлекать данные для объектов LineItem. Это весьма накладно. Отложенная загрузка позволяет извлекать только те данные, которые действительно необходимы.

#  Полная загрузка (eager fetching) – полная противоположность

отложенной загрузке. Полная загрузка позволяет извлечь все дерево объектов в одном запросе. Когда точно известно, что приложению потребуются все объекты PurchaseOrder и в свя- занные с ними объекты LineItems, полная загрузка позволит получить их из базы данных за одну операцию, избавляя от накладных расходов на повторные обращения к ней.

# Каскадирование (cascading) – иногда изменения в одной таб-

лице базы данных должны привести к изменениям в других таблицах. Возвращаясь к примеру с объектами PurchaseOrder: при удалении объекта PurchaseOrder обычно бывает желательно удалить из базы данных все связанные с ним объекты LineItems.

Существуют фреймворки, способные предоставить подобную функциональность. Общее название для такой функциональности – объектно-реляционное отображение (Object-Relational Mapping, ORM). Применение инструмента ORM для слоя, реализующего хранение данных, может буквально спасти от необходимости писать тысячи строк лишнего кода и сэкономить массу времени на его раз- работку. Это позволит сместить фокус с написания чреватого ошиб- ками SQL-кода на решение прикладных задач самого приложения.

Фреймворк Spring включает поддержку некоторых фреймворков, реализующих хранение данных, включая Hibernateт, iBATIS, Java Data Objects (JDO) и Java Persistence API (JPA).

Как и в случае с поддержкой JDBC, Spring обеспечивает поддерж- ку фреймворков ORM, предоставляя точки интеграции для фрейм- ворков, а также некоторые дополнительные услуги, такие как:

#  интегрированная поддержка декларативных транзакций;

#  прозрачная обработка исключений;

# легковесные  классы  шаблонов  с  поддержкой  выполнения в многопоточной среде;

#  классы поддержки DAO;

#  управление ресурсами.

В этой главе недостаточно места, чтобы рассмотреть все фрейм- ворки ORM, поддерживаемые фреймворком Spring. Это даже хо-

рошо, потому что поддержка различных реализаций ORM в Spring похожа друг на друга. Как только вы приобретаете навык исполь- зования любого из фреймворков ORM в Spring, вы легко сможете переключиться на другой.

Начнем изучение с обзора интеграции Spring с самым, пожалуй, популярным фреймворком – Hibernate. Далее в этой главе (раз- дел 6.5) мы также познакомимся с особенностями интеграции Spring с JPA.

Hibernate – это открытый фреймворк ORM, получивший широ- кую популярность в сообществе разработчиков. Он обеспечивает не только базовые возможности объектно-реляционного отображе- ния, но также и все прочие «фишки», которые принято ожидать от полнофункционального инструмента ORM, такие как отложенная загрузка, полная загрузка и распределенное кеширование.

В этом разделе мы сконцентрируемся на особенностях интеграции Spring с Hibernate, не углубляясь в запутанные детали использова- ния фреймворка Hibernate. За более подробной информацией по работе с фреймворком Hibernate я рекомендую обращаться к книге

«Java Persistence with Hibernate» (Manning, 2006) или на веб-сайт проекта Hibernate по адресу: http://www.hibernate.org.

Источник:   Уоллс К., Spring в действии. – М.: ДМК Пресс, 2013. – 752 с.: ил.

По теме:

  • Комментарии