hibernate что это такое

Hibernate для начинающих

Я сталкивался (да и не только я) с проблемой развертывания Hibernate и решил попробовать осветить данную тему. Hibernate — это популярный framework, цель которого связать ООП и реляционную базу данных. Работа с Hibernate сократит время разработки проекта в сравнении с обычным jdbc.

hibernate что это такое. Смотреть фото hibernate что это такое. Смотреть картинку hibernate что это такое. Картинка про hibernate что это такое. Фото hibernate что это такое

Потом в pom.xml вставляем. Нам понадобятся две зависимости: hibernate-core и mysql-connector, но если вы хотите больше функционала — вы должны подключить больше зависимостей.

Существуют стандартные рекомендации подключать зависимости по отдельности, но я так не делаю.

И щелкаем на Import Changes Enable Auto-Import, автоматически импортируя изменения.

hibernate что это такое. Смотреть фото hibernate что это такое. Смотреть картинку hibernate что это такое. Картинка про hibernate что это такое. Фото hibernate что это такое

Подключаемся к базе данных, которая развернута на локальном компьютере, выбираем поставщика баз данных MySQL.

hibernate что это такое. Смотреть фото hibernate что это такое. Смотреть картинку hibernate что это такое. Картинка про hibernate что это такое. Фото hibernate что это такое

Вводим имя базы данных, имя пользователя и пароль. Протестируйте соединение.

hibernate что это такое. Смотреть фото hibernate что это такое. Смотреть картинку hibernate что это такое. Картинка про hibernate что это такое. Фото hibernate что это такое

Выбираем проект и через framework support просим у хибернейта создать за нас Entity файлы и классы с Getter и Setter.

hibernate что это такое. Смотреть фото hibernate что это такое. Смотреть картинку hibernate что это такое. Картинка про hibernate что это такое. Фото hibernate что это такое

hibernate что это такое. Смотреть фото hibernate что это такое. Смотреть картинку hibernate что это такое. Картинка про hibernate что это такое. Фото hibernate что это такое

Выбираем Generate Persistence Mapping через кладку Persistence, выбираем jenerate Persistance Mapping, а в появившемся окне прописываем схему базы данных, выбираем prefix и
sufix к автоматически сгенерированным названиям. Будут сгенерированы названия xml файлов и классов с аннотациями:

hibernate что это такое. Смотреть фото hibernate что это такое. Смотреть картинку hibernate что это такое. Картинка про hibernate что это такое. Фото hibernate что это такое

hibernate что это такое. Смотреть фото hibernate что это такое. Смотреть картинку hibernate что это такое. Картинка про hibernate что это такое. Фото hibernate что это такое

Дописываем в hibernate.cfg username и password (звёзды поставил я, а так пишите обычным шрифтом).

hibernate что это такое. Смотреть фото hibernate что это такое. Смотреть картинку hibernate что это такое. Картинка про hibernate что это такое. Фото hibernate что это такое

Вот и все! Дальше через класс main запускаем проект.

Это моя первая статья. Рассчитываю на здравую критику.

Источник

Основы Hibernate в Java

Hibernate – это объектно-реляционное картографическое решение с открытым исходным кодом на Java. Он легкий и устраняет все недостатки, с которыми мы сталкиваемся при работе с JDBC.

Что такое Hibernate в Java?

Hibernate – это фреймворк на Java, который поставляется с уровнем абстракции и обрабатывает реализации внутри. Реализации включают в себя такие задачи, как написание запроса для операций CRUD или установление соединения с базами данных и т. д.

Фреймворк – это в основном программное обеспечение, которое обеспечивает абстракцию для нескольких технологий, таких как JDBC, сервлет и т. д.

Hibernate разрабатывает логику сохранения, которая хранит и обрабатывает данные для более длительного использования. Это легкий инструмент ORM и, что самое важное, с открытым исходным кодом, что дает ему преимущество перед другими фреймворками.

Что такое инструмент ORM?

Это метод, который отображает объект, хранящийся в базе данных. Инструмент ORM упрощает создание данных, манипулирование ими и доступ к ним. Для взаимодействия с базами данных он внутренне использует Java API.

hibernate что это такое. Смотреть фото hibernate что это такое. Смотреть картинку hibernate что это такое. Картинка про hibernate что это такое. Фото hibernate что это такое

Давайте посмотрим на необходимость использования гибернации в Java.

Потребность в Hibernate Framework

Hibernate устраняет недостатки других технологий, таких как JDBC. Давайте посмотрим, как он оптимизирует задачи лучше, чем JDBC.

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

Введение

Фреймворк с открытым исходным кодом доступен для всех бесплатно. Исходный код для гибернации можно найти в Интернете, что также позволяет вносить изменения.

В преимуществе легкости каркаса можно увидеть значительно меньший пакет для установки. Эффективность увеличивается, если для выполнения не используются никакие контейнеры. Хотя спящий режим может работать с несколькими технологиями одновременно, это не означает, что спящий режим не может работать в одиночку. Мы можем работать и с гибернацией в одиночку, т.е. без каких-либо технологий.

Hibernate имеет особую природу, в которой не требуется реализовывать интерфейсы API спящего режима или расширять классы API.

Функции, поддерживаемые Hibernate

Ниже приведены базы данных, поддерживаемые спящим режимом в Java.

Hibernate почти поддерживает все основные СУБД, что делает его эффективным и простым в работе.

Технологии, поддерживаемые Hibernate

Hibernate поддерживает множество технологий.

Давайте рассмотрим несколько преимуществ гибернации в java.

Источник

Hibernate в вопросах и ответах

1. Что такое Hibernate Framework?

Hibernate — это библиотека с открытым исходным кодом (open source) для Java, предназначенная для решения задач ORM (object-relational mapping, объектно-реляционного отображения). Она представляет собой свободное программное обеспечение, распространяемое на условиях GNU Lesser General Public License. Hibernate Framework имеет легкий в использовании каркас для отображения объектно-ориентированной модели данных в традиционные реляционные базы данных и предоставляет стандартные средства JPA.

2. Преимущества использования Hibernate Framework?

Библиотека Hibernate является одним из самых востребованных ORM фреймворков для Java, поскольку :

3. Объекты Hibernate SessionFactory, Session и Transaction

SessionFactoryЭкземпляр SessionFactory создается методом buildSessionFactory (ServiceRegistry) объекта org.hibernate.Configuration и предназначен для получения объекта Session. Инициализируется SessionFactory один раз. Внутреннее состояние SessionFactory неизменно (immutable), т.е. он является потокобезопасным. Internal state (внутреннее состояние) включает в себя все метаданные об Object Relational Mapping, определяемые при создании SessionFactory.
SessionFactory также предоставляет методы для получения метаданных класса и статистики, типа данных о втором уровне кэша, выполняемых запросах и т.д.
SessionОднопоточный объект, устанавливающий связь между объектами/сущностями приложения и базой данных. Сессия создается при необходимости работы с БД и ее необходимо закрыть сразу же после использования. Экземпляр Session является интерфейсом между кодом в java приложении и hibernate framework, предоставляя методы для операций CRUD.
TransactionОднопоточный объект, используемый для атомарных операций. Это абстракция приложения от основных JDBC или JTA транзакций. org.hibernate.Session может занимать несколько org.hibernate.Transaction в определенных случаях.

Пример использования объектов SessionFactory, Session, Transaction.

4. Конфигурационный файл Hibernate

Файл конфигурации hibernate.cfg.xml содержит информацию о базе данных (драйвер, пул подключений, диалект) и параметрах подключения к серверу БД (url, login, password). В качестве параметров подключения можно использовать как JDBC, так и JNDI. В файле конфигурации также определяются дополнительные параметры, которые будут использованы при работе с сервером БД, Так, здесь необходимо определить маппинги сущностей/классов.

Чтобы отобразить в консоли SQL-скрипты, генерируемые Hibernate, необходимо в hibernate.cfg.xml определить истиное значение свойства «show_sql». Помните, что это необходимо использовать только на уровне разработки и тестирования. В финальной версии свойство «show_sql» должно быть отключено.

Пример файла конфигурации связанных сущностей.

5. Файл mapping

6. Важные аннотации для отображения в Hibernate

Наиболее употребительные аннотации Hibernate из пакета javax.persistence представлены в следующей таблице :

@EntityОпределение класса как сущность entity bean
@Table, @ColumnОпределение таблицы в БД и наименования колонки в таблице
@IdПоле Primary Key в сущности entity bean
@GeneratedValueОпределение стратегии создания основных ключей
@SequenceGeneratorОпределение генератора последовательности
@OneToMany, @ManyToOne, @ManyToManyОпределение связи между сущностными бинами

Подробнее об аннотациях в сущностных бинах.

7. Отличие методов openSession и getCurrentSession

Методы openSession и getCurrentSession объекта SessionFactory возвращают сессию Session.

Метод getCurrentSession объекта SessionFactory возвращает сессию, связанную с контекстом. Но для того, чтобы метод вернул не NULL, необходимо настроить параметр current_session_context_class в конфигурационном файле hibernate. Поскольку полученный объект Session связан с контекстом hibernate, то отпадает необходимость в его закрытии; он закрывается вместе с закрытием SessionFactory.

Метод openSession объекта SessionFactory всегда создает новую сессию. В этом случае необходимо обязательно контролировать закрытие объекта сессии по завершению всех операций с базой данных. Для многопоточной среды необходимо создавать новый объект Session для каждого запроса.

При загрузке больших объемов данных без удержания большого количества информации в кэше можно использовать метод openStatelessSession(), который возвращает Session без поддержки состояния. Полученный объект не реализует первый уровень кэширования и не взаимодействует со вторым уровнем. Сюда же можно отнести игнорирование коллекций и некоторых обработчиков событий.

8. Отличие методов get и load объекта Session

Для загрузки информации из базы данных в виде набора/коллекции сущностей объект Session имеет несколько методов. Наиболее часто используемые методы get и load. Метод get загружает данные сразу же при вызове, в то время как load использует прокси объект и загружает данные только тогда, когда это требуется на самом деле (при обращении к данным). В этом плане load имеет преимущество в плане ленивой загрузки данных.

Метод load вызывает исключение, если данные не найдены. Поэтому load нужно использовать только при уверенности в существовании данных. Если необходимо удостовериться в наличии данных в БД, то нужно использовать метод get.

9. Различные состояния Entity Bean

Сущность Entity Bean может находиться в одном из трех состояний :

transientСостояние сущности, при котором она не была связана с какой-либо сессией и не является persistent. Сущность может перейти в состояние persistent при вызове метода save(), persist() или saveOrUpdate() объекта сессии.
persistentЭкземпляр сущности, полученный методами get() или load() объекта сессии, находится в состоянии persistent, т.е. связан с сессией. Из состояния persistent сущность можно перевести в transient после вызова метода delete() сессии.
detachedЕсли объект находился в сотоянии persistent, но перестал быть связанным с какой-либо сессией, то он переходит в состояние detached. Такой объект можно сделать персистентным, используя методы update(), saveOrUpdate(), lock() или replicate().

Из состояний transient и detached объект можно перевести в состояние persistent в виде нового объекта после вызова метода merge().

10. Отличия методов save, saveOrUpdate и persist

Метод save используется для сохранения сущности в базе данных. Этот метод возвращает сгенерированный идентификатор. Возникаемые проблемы с использованием save связаны с тем, что метод может быть вызван без транзакции. А следовательно если имеется отображение нескольких связанных объектов, то только первичный объект будет сохранен, т.е. можно получить несогласованные данные.

Метод hibernate persist аналогичен save, но выполняется с транзакцией. Метод persist не возвращает сгенерированный идентификатор сразу.

Метод saveOrUpdate используется для вставки или обновления сущности. Если объект уже присутствуют в базе данных, то будет выполнен запрос обновления. Метод saveOrUpdate можно применять без транзакции, но это может привести к аналогичным проблемам, как и в случае с методом save.

11. Использование метода сессии merge

Метод Hibernate merge объекта сессии может быть использован для обновления существующих значений. Необходимо помнить, что данный метод создает и возвращает копию из переданного объекта сущности. Возвращаемый объект является частью контекста персистентности с отслеживанием любых изменений, а переданный объект не отслеживается.

12. Отсутствие в Entity Bean конструктора без параметров

Hibernate использует рефлексию для создания экземпляров Entity бинов при вызове методов get или load. Для этого используется метод Class.newInstance, который требует наличия конструктора без параметров. Поэтому, в случае его отсутствия, будет вызвано исключение HibernateException.

13. Entity Bean не должна быть final

Hibernate использует прокси классы для ленивой (lazy) загрузки данных (т.е. не сразу, а по необходимости). Это достигается с помощью расширения Entity Bean. Отсюда следует, что если бы он был final, то это было бы невозможно.

Ленивая загрузка данных во многих случаях повышает производительность, а следовательно важна и от нее не следует отказываться.

14. Сортировка данных в Hibernate

При использовании алгоритмов сортировки из Collection API используется сортированный список (sorted list). Для маленьких коллекций это не приводит к излишнему расходу ресурсов. Однако на больших коллекциях это может привести к потере производительности и ошибкам OutOfMemory.

Entity Bean’ы для работы с сортированными коллекциями должны реализовывать интерфейс Comparable/Comparator. При использовании фреймворка Hibernate для загрузки данных можно применить Collection API и команду order by для получения сортированного списка (ordered list). Ordered list является лучшим способом получения sorted list, т.к. используется сортировка на уровне базы данных, работающая быстрее и не приводящая к утечке памяти. Пример запроса к БД для получения ordered list :

Hibernate использует следующие типы коллекций : Bag, Set, List, Array, Map.

15. Использование Query Cache в Hibernate

Hibernate реализует область кэша для запросов ResultSet, который тесно взаимодействует с кэшем второго уровня Hibernate. Для подключения этой дополнительной функции необходимо определить истинное значение свойства hibernate.cache.use_query_cache в файле конфигурации hibernate.cfg.xml и в коде при обращении к БД использовать метод setCacheable(true). Кэшированные запросы полезны только при их частом исполнении с повторяющимися параметрами.

Определение свойства в файле конфигурации Hibernate :

Формирование запроса с использованием метода setCacheable (true) :

16. Язык запросов HQL

Hibernate включает мощный язык запросов HQL (Hibernate Query Language), который очень похож на родной SQL. В сравнении с SQL, HQL полностью объектно-ориентирован и использует понятия наследования, полиформизма и связывания.

HQL использует имя класса взамен имени таблицы, а также имя свойства вместо имени колонки. Пример HQL :

17. Нативный SQL-запрос в Hibernate

Для выполнения нативного запроса необходимо использовать SQLQuery, который может выполнять чистый SQL-запрос. Но необходимо учитывать, что в этом случае можно потерять все преимущества HQL (ассоциации, кэширование). Пример нативного SQL-запроса :

18. Преимущества поддержки нативного SQL-запроса

Использование нативного SQL может быть необходимо при выполнении некоторых запросов к базам данных, которые могут не поддерживаться в Hibernate. Т.е. включение в запросы специфичных для БД «фишек».

19. Именованный запрос, Named SQL Query

Hibernate поддерживает использование именованных запросов, которые можно определить в одном месте и использовать в любом месте в коде. Именованные запросы поддерживают как HQL, так и Native SQL. Для создания Named SQL Query можно использовать JPA аннотации @NamedQuery, @NamedNativeQuery или конфигурационный файл отображения (mapping files). Пример описания и использования Named SQL Query.

20. Преимущества именованных запросов Named SQL Query

Named Query имеют глобальный характер, т.е. заданные в одном месте, доступны в любом месте кода. Синтаксис Named Query проверяется при создании SessionFactory, что позволяет заметить ошибку на раннем этапе, а не при запущенном приложении и выполнении запроса.

Одним из основных недостатков именованного запроса является то, что его сложнее отлаживать. Сложности могут быть связаны с поиском места определения запроса. Поэтому не разбрасывайтесь описанием запросов в различных участках. Можно все связанные с сущностью запросы описать непосредственно в классе, используя аннотацию @NamedQueries, как это показано в следующем коде :

21. Использование org.hibernate.Criteria

Hibernate Criteria API представляет альтернативный подход HQL и позволяет выполнять запросы в БД без написания SQL кода. Для создания экземпляров Criteria используется класс Session. Пример Criteria с необязательным обрамлением в транзакцию :

Приведенный выше запрос вернет первые 10 записей из таблицы сущности User. Метод setMaxResults представляет собой аналог команды LIMIT в SQL-запросе. Чтобы прочитать определенное количество записей с с определенной позиции (LIMIT 2, 15) необходимо дополнительно использовать метод setFirstResult :

Подробнее о org.hibernate.Criteria можно прочитать здесь.

22. Hibernate proxy и ленивая загрузка (lazy load)

Hibernate может использовать прокси для поддержки отложенной загрузки. При соответствующем атрибут fetch аннотации связи (fetch определяет стратегию загрузки дочерних объектов) из базы данных не загружаются связанные объекты. При первом обращении к дочернему объекту с помощью метода get, если связанная сущность отсутствует в кэше сессии, то прокси код перейдет к базе данных для загрузки связанной сущности. Для этого используется javassist, чтобы эффективно и динамически создавать реализации подклассов Entity Bean объектов.

Подробнее об атрибуте загрузки связанных объектов fetch.

23. Каскадные связи

При наличии зависимостей (связей) между сущностями необходимо определить влияние различных операций одной сущности на связанные. Это можно реализовать с помощью аннотации каскадных связей @Cascade. Пример использования @Cascade :

Помните, что имеются некоторые различия между enum CascadeType в Hibernate и в JPA. Поэтому обращайте внимание на импортируемый пакет при использовании аннотации и константы типа. Наиболее часто используемые CascadeType перечисления описаны ниже :

24. Управление транзакциями

Hibernate не допускает большинство операций без использования транзакций. Для начала транзакции необходимо выполнить метод beginTransaction объекта сессии Session, возвращающий ссылку, которую можно использовать для подтверждения или отката транзакции.

Любое вызываемое в Hibernate исключение автоматически вызывает rollback.

Источник

Hibernate — Краткое руководство

JDBC предоставляет гибкую архитектуру для написания независимого от базы данных приложения, которое может работать на разных платформах и взаимодействовать с разными СУБД без каких-либо изменений.

Плюсы и минусы JDBC

Чистая и простая обработка SQL

Хорошая производительность с большими данными

Очень хорошо для небольших приложений

Простой синтаксис так легко выучить

Сложный, если он используется в крупных проектах

Большие накладные расходы на программирование

Трудно реализовать концепцию MVC

Запрос специфичен для СУБД

Чистая и простая обработка SQL

Хорошая производительность с большими данными

Очень хорошо для небольших приложений

Простой синтаксис так легко выучить

Сложный, если он используется в крупных проектах

Большие накладные расходы на программирование

Трудно реализовать концепцию MVC

Запрос специфичен для СУБД

Почему объектно-реляционное сопоставление (ORM)?

Когда мы работаем с объектно-ориентированной системой, существует несоответствие между объектной моделью и реляционной базой данных. СУБД представляют данные в табличном формате, тогда как объектно-ориентированные языки, такие как Java или C #, представляют их как взаимосвязанный граф объектов.

Рассмотрим следующий Java-класс с правильными конструкторами и связанной с ним публичной функцией —

Учтите, что вышеперечисленные объекты должны быть сохранены и извлечены в следующую таблицу RDBMS:

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

Иногда у вас будет объектная модель, которая имеет больше классов, чем количество соответствующих таблиц в базе данных.

СУБД не определяют ничего похожего на Inheritance, которая является естественной парадигмой в объектно-ориентированных языках программирования.

СУБД определяет ровно одно понятие «сходство»: первичный ключ. Java, однако, определяет как идентичность объекта (a == b), так и равенство объектов (a.equals (b)).

Объектно-ориентированные языки представляют ассоциации с использованием объектных ссылок, тогда как СУБД представляет ассоциацию в виде столбца внешнего ключа.

Способы доступа к объектам в Java и в RDBMS принципиально различны.

Иногда у вас будет объектная модель, которая имеет больше классов, чем количество соответствующих таблиц в базе данных.

СУБД не определяют ничего похожего на Inheritance, которая является естественной парадигмой в объектно-ориентированных языках программирования.

СУБД определяет ровно одно понятие «сходство»: первичный ключ. Java, однако, определяет как идентичность объекта (a == b), так и равенство объектов (a.equals (b)).

Объектно-ориентированные языки представляют ассоциации с использованием объектных ссылок, тогда как СУБД представляет ассоциацию в виде столбца внешнего ключа.

Способы доступа к объектам в Java и в RDBMS принципиально различны.

Приложение O bject- R elational M (ORM) — это решение для обработки всех вышеуказанных несовпадений импеданса.

Что такое ORM?

ORM расшифровывается как O bject- R elational M apping (ORM) — это метод программирования для преобразования данных между реляционными базами данных и объектно-ориентированными языками программирования, такими как Java, C # и т. Д.

Система ORM имеет следующие преимущества перед простым JDBC:

Sr.No.Несоответствие и описание
1
Sr.No.преимущества
1Давайте бизнес-кодам обращаться к объектам, а не к таблицам БД.
2Скрывает детали SQL-запросов от ОО-логики.
3По материалам JDBC «под капотом».
4Не нужно заниматься реализацией базы данных.
5Объекты, основанные на бизнес-концепциях, а не на структуре базы данных.
6Управление транзакциями и автоматическая генерация ключей.
7Быстрая разработка приложения.

Решение ORM состоит из следующих четырех объектов:

Sr.No.Решения
1API для выполнения основных операций CRUD над объектами постоянных классов.
2Язык или API для указания запросов, которые ссылаются на классы и свойства классов.
3Настраиваемое средство для указания метаданных отображения.
4Техника взаимодействия с транзакционными объектами для выполнения грязной проверки, отложенной выборки ассоциаций и других функций оптимизации.

Java ORM Frameworks

В Java есть несколько постоянных сред и опций ORM. Постоянная структура — это служба ORM, которая сохраняет и извлекает объекты в реляционную базу данных.

Hibernate — Обзор

Hibernate — это решение O bject- R elational M (ORM) для JAVA. Это постоянный фреймворк с открытым исходным кодом, созданный Гэвином Кингом в 2001 году. Это мощный высокопроизводительный сервис объектно-реляционной персистентности и запросов для любого Java-приложения.

Hibernate отображает классы Java в таблицы базы данных и из типов данных Java в типы данных SQL и освобождает разработчика от 95% общих задач программирования, связанных с сохранением данных.

Hibernate находится между традиционными объектами Java и сервером базы данных и выполняет все действия по сохранению этих объектов на основе соответствующих механизмов и шаблонов O / R.

hibernate что это такое. Смотреть фото hibernate что это такое. Смотреть картинку hibernate что это такое. Картинка про hibernate что это такое. Фото hibernate что это такое

Преимущества гибернации

Hibernate занимается отображением классов Java в таблицы базы данных с использованием файлов XML и без написания какой-либо строки кода.

Предоставляет простые API-интерфейсы для хранения и извлечения объектов Java непосредственно в базу данных и из нее.

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

Абстрагирует незнакомые типы SQL и предоставляет способ работы со знакомыми объектами Java.

Hibernate не требует сервера приложений для работы.

Управляет сложными ассоциациями объектов вашей базы данных.

Минимизирует доступ к базе данных с помощью умных стратегий извлечения.

Обеспечивает простой запрос данных.

Hibernate занимается отображением классов Java в таблицы базы данных с использованием файлов XML и без написания какой-либо строки кода.

Предоставляет простые API-интерфейсы для хранения и извлечения объектов Java непосредственно в базу данных и из нее.

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

Абстрагирует незнакомые типы SQL и предоставляет способ работы со знакомыми объектами Java.

Hibernate не требует сервера приложений для работы.

Управляет сложными ассоциациями объектов вашей базы данных.

Минимизирует доступ к базе данных с помощью умных стратегий извлечения.

Обеспечивает простой запрос данных.

Поддерживаемые базы данных

Hibernate поддерживает практически все основные СУБД. Ниже приведен список нескольких ядер баз данных, поддерживаемых Hibernate.

Поддерживаемые технологии

Hibernate поддерживает множество других технологий, в том числе —

Hibernate — Архитектура

Hibernate имеет многоуровневую архитектуру, которая помогает пользователю работать без знания базовых API. Hibernate использует базу данных и данные конфигурации для предоставления приложениям постоянных сервисов (и постоянных объектов).

Ниже приводится очень высокий уровень представления архитектуры приложений Hibernate.

hibernate что это такое. Смотреть фото hibernate что это такое. Смотреть картинку hibernate что это такое. Картинка про hibernate что это такое. Фото hibernate что это такое

Ниже приведено подробное представление архитектуры приложений Hibernate с ее важными основными классами.

hibernate что это такое. Смотреть фото hibernate что это такое. Смотреть картинку hibernate что это такое. Картинка про hibernate что это такое. Фото hibernate что это такое

Hibernate использует различные существующие API Java, такие как JDBC, API транзакций Java (JTA) и интерфейс именования и каталогов Java (JNDI). JDBC обеспечивает элементарный уровень абстракции функциональности, общей для реляционных баз данных, что позволяет Hibernate поддерживать практически любую базу данных с драйвером JDBC. JNDI и JTA позволяют интегрировать Hibernate с серверами приложений J2EE.

В следующем разделе дается краткое описание каждого из объектов класса, участвующих в Hibernate Application Architecture.

Объект конфигурации

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

Объект конфигурации содержит два ключевых компонента:

Настройка отображения классов — этот компонент создает связь между классами Java и таблицами базы данных.

Настройка отображения классов — этот компонент создает связь между классами Java и таблицами базы данных.

SessionFactory Object

Объект конфигурации используется для создания объекта SessionFactory, который, в свою очередь, настраивает Hibernate для приложения, используя предоставленный файл конфигурации, и позволяет создавать экземпляр объекта Session. SessionFactory является потокобезопасным объектом и используется всеми потоками приложения.

SessionFactory — это тяжеловесный объект; обычно создается во время запуска приложения и сохраняется для последующего использования. Вам потребуется один объект SessionFactory для каждой базы данных с использованием отдельного файла конфигурации. Итак, если вы используете несколько баз данных, вам придется создать несколько объектов SessionFactory.

Объект сеанса

Сессия используется для получения физического соединения с базой данных. Объект Session является легким и предназначен для реализации каждый раз, когда необходимо взаимодействие с базой данных. Постоянные объекты сохраняются и извлекаются через объект Session.

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

Объект сделки

Транзакция представляет собой единицу работы с базой данных, и большинство СУБД поддерживает функциональность транзакций. Транзакции в Hibernate обрабатываются соответствующим менеджером транзакций и транзакциями (из JDBC или JTA).

Это необязательный объект, и приложения Hibernate могут не использовать этот интерфейс, а вместо этого управлять транзакциями в собственном коде приложения.

Объект запроса

Объекты запросов используют строку SQL или язык запросов Hibernate (HQL) для извлечения данных из базы данных и создания объектов. Экземпляр Query используется для привязки параметров запроса, ограничения количества результатов, возвращаемых запросом, и, наконец, для выполнения запроса.

Критерий Объект

Объекты критериев используются для создания и выполнения объектно-ориентированных запросов критериев для извлечения объектов.

Hibernate — Окружающая среда

Скачивание Hibernate

Предполагается, что в вашей системе уже установлена ​​последняя версия Java. Ниже приведены простые шаги для загрузки и установки Hibernate в вашей системе:

На момент написания этого руководства я скачал hibernate-distribution3.6.4.Final, и когда вы распакуете загруженный файл, он даст вам структуру каталогов, как показано на следующем рисунке

На момент написания этого руководства я скачал hibernate-distribution3.6.4.Final, и когда вы распакуете загруженный файл, он даст вам структуру каталогов, как показано на следующем рисунке

hibernate что это такое. Смотреть фото hibernate что это такое. Смотреть картинку hibernate что это такое. Картинка про hibernate что это такое. Фото hibernate что это такое

Установка Hibernate

После того, как вы загрузили и разархивировали последнюю версию установочного файла Hibernate, вам необходимо выполнить два простых шага. Убедитесь, что вы устанавливаете переменную CLASSPATH правильно, иначе вы столкнетесь с проблемой при компиляции приложения.

Теперь скопируйте все файлы библиотеки из / lib в ваш CLASSPATH и измените переменную classpath, чтобы включить все JAR —

Наконец, скопируйте файл hibernate3.jar в свой CLASSPATH. Этот файл находится в корневом каталоге установки и является основным JAR, который необходим Hibernate для своей работы.

Теперь скопируйте все файлы библиотеки из / lib в ваш CLASSPATH и измените переменную classpath, чтобы включить все JAR —

Наконец, скопируйте файл hibernate3.jar в свой CLASSPATH. Этот файл находится в корневом каталоге установки и является основным JAR, который необходим Hibernate для своей работы.

Необходимые условия гибернации

Ниже приведен список пакетов / библиотек, необходимых для Hibernate, и вам следует установить их перед началом работы с Hibernate. Чтобы установить эти пакеты, вам нужно будет скопировать файлы библиотеки из / lib в ваш CLASSPATH и соответственно изменить переменную CLASSPATH.

Синтаксический анализ XML www.dom4j.org/

Соответствующие изменения в классах Java во время выполнения http://cglib.sourceforge.net/

Фасад логирования для Java https://www.slf4j.org

Синтаксический анализ XML www.dom4j.org/

Соответствующие изменения в классах Java во время выполнения http://cglib.sourceforge.net/

Фасад логирования для Java https://www.slf4j.org

Hibernate — Конфигурация

Я рассмотрю файл hibernate.cfg.xml в формате XML, чтобы указать необходимые свойства Hibernate в моих примерах. Большинство свойств принимают значения по умолчанию, и нет необходимости указывать их в файле свойств, если это действительно не требуется. Этот файл хранится в корневом каталоге пути к классу вашего приложения.

Спящие свойства

Ниже приведен список важных свойств, вам необходимо будет настроить для баз данных в автономной ситуации —

Sr.No.Пакеты / Библиотеки
1

Это свойство заставляет Hibernate генерировать соответствующий SQL для выбранной базы данных.

Класс драйвера JDBC.

URL JDBC для экземпляра базы данных.

Имя пользователя базы данных.

Пароль базы данных.

Ограничивает количество соединений, ожидающих в пуле соединений базы данных Hibernate.

Позволяет использовать режим автоматической фиксации для соединения JDBC.

Это свойство заставляет Hibernate генерировать соответствующий SQL для выбранной базы данных.

Класс драйвера JDBC.

URL JDBC для экземпляра базы данных.

Имя пользователя базы данных.

Пароль базы данных.

Ограничивает количество соединений, ожидающих в пуле соединений базы данных Hibernate.

Позволяет использовать режим автоматической фиксации для соединения JDBC.

Если вы используете базу данных вместе с сервером приложений и JNDI, вам придется настроить следующие свойства:

Sr.No.Свойства и описание
1

Имя JNDI, определенное в контексте сервера приложений, которое вы используете для приложения.

Класс InitialContext для JNDI.

Передает любое свойство JNDI, которое вам нравится, в InitialContext JNDI.

Предоставляет URL для JNDI.

Имя пользователя базы данных.

Пароль базы данных.

Имя JNDI, определенное в контексте сервера приложений, которое вы используете для приложения.

Класс InitialContext для JNDI.

Передает любое свойство JNDI, которое вам нравится, в InitialContext JNDI.

Предоставляет URL для JNDI.

Имя пользователя базы данных.

Пароль базы данных.

Hibernate с базой данных MySQL

MySQL — одна из самых популярных систем баз данных с открытым исходным кодом, доступных сегодня. Давайте создадим файл конфигурации hibernate.cfg.xml и поместим его в корень пути к классу вашего приложения. Вы должны будете убедиться, что у вас есть база данных testdb, доступная в вашей базе данных MySQL, и у вас есть доступный пользовательский тест для доступа к базе данных.

Ниже приведен список различных важных типов баз данных диалекта —

Sr.No.Свойства и описание
1

Microsoft SQL Server 2000

Microsoft SQL Server 2005

Microsoft SQL Server 2008

Oracle (любая версия)

Microsoft SQL Server 2000

Microsoft SQL Server 2005

Microsoft SQL Server 2008

Oracle (любая версия)

Hibernate — Сессии

Сессия используется для получения физического соединения с базой данных. Объект Session является легким и предназначен для реализации каждый раз, когда необходимо взаимодействие с базой данных. Постоянные объекты сохраняются и извлекаются через объект Session.

Объекты сеанса не должны оставаться открытыми в течение длительного времени, потому что они обычно не являются потокобезопасными, и их следует создавать и уничтожать по мере необходимости. Основная функция Session — предлагать, создавать, читать и удалять операции для экземпляров классов сопоставленных сущностей.

Экземпляры могут существовать в одном из следующих трех состояний в данный момент времени —

временный — новый экземпляр постоянного класса, который не связан с сеансом и не представлен в базе данных, а значение идентификатора не считается временным в Hibernate.

persistent — вы можете сделать временный экземпляр постоянным, связав его с сеансом. Постоянный экземпляр имеет представление в базе данных, значение идентификатора и связан с сеансом.

detached — после того, как мы закроем Hibernate Session, постоянный экземпляр станет отдельным экземпляром.

временный — новый экземпляр постоянного класса, который не связан с сеансом и не представлен в базе данных, а значение идентификатора не считается временным в Hibernate.

persistent — вы можете сделать временный экземпляр постоянным, связав его с сеансом. Постоянный экземпляр имеет представление в базе данных, значение идентификатора и связан с сеансом.

detached — после того, как мы закроем Hibernate Session, постоянный экземпляр станет отдельным экземпляром.

Экземпляр Session является сериализуемым, если его постоянные классы сериализуемы. Типичная транзакция должна использовать следующую идиому —

Если сеанс вызывает исключение, транзакция должна быть откатана, а сеанс должен быть отменен.

Методы интерфейса сеанса

Sr.No.База данных и диалект собственности
1

Начните единицу работы и верните связанный объект транзакции.

Отмените выполнение текущего запроса.

Полностью очистить сессию.

Завершите сеанс, освободив соединение JDBC и очистив.

Критерии createCriteria (Класс persistentClass)

Создайте новый экземпляр Criteria для данного класса сущности или суперкласса класса сущности.

Критерии createCriteria (String entityName)

Создайте новый экземпляр Criteria для данного имени объекта.

Сериализуемый getIdentifier (Объектный объект)

Вернуть значение идентификатора данного объекта, связанного с этим сеансом.

Запрос createFilter (Коллекция объектов, String queryString)

Создайте новый экземпляр Query для данной коллекции и строку фильтра.

Запрос createQuery (String queryString)

Создайте новый экземпляр Query для заданной строки запроса HQL.

SQLQuery createSQLQuery (String queryString)

Создайте новый экземпляр SQLQuery для данной строки запроса SQL.

void delete (объектный объект)

Удалите постоянный экземпляр из хранилища данных.

void delete (String entityName, Object object)

Удалите постоянный экземпляр из хранилища данных.

Сеанс get (String entityName, Serializable id)

Вернуть постоянный экземпляр указанного именованного объекта с указанным идентификатором или значение NULL, если такого постоянного экземпляра нет.

Получить фабрику сеансов, которая создала этот сеанс.

void refresh (объектный объект)

Перечитайте состояние данного экземпляра из базовой базы данных.

Получить экземпляр транзакции, связанный с этим сеансом.

Проверьте, подключен ли сеанс в данный момент.

Содержит ли этот сеанс какие-либо изменения, которые должны быть синхронизированы с базой данных?

Проверьте, открыт ли сеанс.

Сериализуемое сохранение (объектный объект)

Сохраните данный временный экземпляр, сначала назначив сгенерированный идентификатор.

void saveOrUpdate (Объектный объект)

Сохраните (Object) или обновите (Object) данный экземпляр.

void update (Объектный объект)

Обновите постоянный экземпляр с помощью идентификатора данного отдельного экземпляра.

void update (String entityName, Object object)

Обновите постоянный экземпляр с помощью идентификатора данного отдельного экземпляра.

Начните единицу работы и верните связанный объект транзакции.

Отмените выполнение текущего запроса.

Полностью очистить сессию.

Завершите сеанс, освободив соединение JDBC и очистив.

Критерии createCriteria (Класс persistentClass)

Создайте новый экземпляр Criteria для данного класса сущности или суперкласса класса сущности.

Критерии createCriteria (String entityName)

Создайте новый экземпляр Criteria для данного имени объекта.

Сериализуемый getIdentifier (Объектный объект)

Вернуть значение идентификатора данного объекта, связанного с этим сеансом.

Запрос createFilter (Коллекция объектов, String queryString)

Создайте новый экземпляр Query для данной коллекции и строку фильтра.

Запрос createQuery (String queryString)

Создайте новый экземпляр Query для заданной строки запроса HQL.

SQLQuery createSQLQuery (String queryString)

Создайте новый экземпляр SQLQuery для данной строки запроса SQL.

void delete (объектный объект)

Удалите постоянный экземпляр из хранилища данных.

void delete (String entityName, Object object)

Удалите постоянный экземпляр из хранилища данных.

Сеанс get (String entityName, Serializable id)

Вернуть постоянный экземпляр указанного именованного объекта с указанным идентификатором или значение NULL, если такого постоянного экземпляра нет.

Получить фабрику сеансов, которая создала этот сеанс.

void refresh (объектный объект)

Перечитайте состояние данного экземпляра из базовой базы данных.

Получить экземпляр транзакции, связанный с этим сеансом.

Проверьте, подключен ли сеанс в данный момент.

Содержит ли этот сеанс какие-либо изменения, которые должны быть синхронизированы с базой данных?

Проверьте, открыт ли сеанс.

Сериализуемое сохранение (объектный объект)

Сохраните данный временный экземпляр, сначала назначив сгенерированный идентификатор.

void saveOrUpdate (Объектный объект)

Сохраните (Object) или обновите (Object) данный экземпляр.

void update (Объектный объект)

Обновите постоянный экземпляр с помощью идентификатора данного отдельного экземпляра.

void update (String entityName, Object object)

Обновите постоянный экземпляр с помощью идентификатора данного отдельного экземпляра.

Hibernate — Постоянный класс

Вся концепция Hibernate состоит в том, чтобы взять значения из атрибутов класса Java и сохранить их в таблице базы данных. Документ сопоставления помогает Hibernate определить, как извлечь значения из классов и сопоставить их с таблицей и связанными полями.

Классы Java, чьи объекты или экземпляры будут храниться в таблицах базы данных, называются постоянными классами в Hibernate. Hibernate работает лучше всего, если эти классы следуют некоторым простым правилам, также известным как модель программирования Plain Old Java Object (POJO).

Существуют следующие основные правила постоянных классов, однако ни одно из этих правил не является жестким.

Все классы Java, которые будут сохранены, нуждаются в конструкторе по умолчанию.

Все классы должны содержать идентификатор, чтобы можно было легко идентифицировать ваши объекты в Hibernate и базе данных. Это свойство отображается в столбец первичного ключа таблицы базы данных.

Все атрибуты, которые будут сохранены, должны быть объявлены закрытыми и иметь методы getXXX и setXXX, определенные в стиле JavaBean.

Центральная особенность прокси-серверов Hibernate зависит от того, является ли постоянный класс не финальным, или от реализации интерфейса, который объявляет все открытые методы.

Все классы, которые не расширяют или не реализуют некоторые специализированные классы и интерфейсы, требуемые EJB-инфраструктурой.

Все классы Java, которые будут сохранены, нуждаются в конструкторе по умолчанию.

Все классы должны содержать идентификатор, чтобы можно было легко идентифицировать ваши объекты в Hibernate и базе данных. Это свойство отображается в столбец первичного ключа таблицы базы данных.

Все атрибуты, которые будут сохранены, должны быть объявлены закрытыми и иметь методы getXXX и setXXX, определенные в стиле JavaBean.

Центральная особенность прокси-серверов Hibernate зависит от того, является ли постоянный класс не финальным, или от реализации интерфейса, который объявляет все открытые методы.

Все классы, которые не расширяют или не реализуют некоторые специализированные классы и интерфейсы, требуемые EJB-инфраструктурой.

Имя POJO используется, чтобы подчеркнуть, что данный объект является обычным Java-объектом, а не специальным объектом и, в частности, не Enterprise JavaBean.

Простой пример POJO

Основываясь на нескольких правилах, упомянутых выше, мы можем определить класс POJO следующим образом:

Hibernate — Файлы сопоставления

Объектные / реляционные отображения обычно определяются в документе XML. Этот файл отображения инструктирует Hibernate — как отобразить определенный класс или классы в таблицы базы данных?

Хотя многие пользователи Hibernate предпочитают писать XML вручную, существует целый ряд инструментов для создания документа сопоставления. К ним относятся XDoclet, Middlegen и AndroMDA для продвинутых пользователей Hibernate.

Давайте рассмотрим наш ранее определенный класс POJO, чьи объекты будут сохраняться в таблице, определенной в следующем разделе.

Там будет одна таблица, соответствующая каждому объекту, который вы готовы предоставить постоянство. Рассмотрим выше объекты должны быть сохранены и извлечены в следующую таблицу RDBMS —

Основываясь на двух вышеуказанных сущностях, мы можем определить следующий файл сопоставления, который инструктирует Hibernate, как сопоставить определенный класс или классы с таблицами базы данных.

Давайте разберемся в деталях об элементах отображения, используемых в файле отображения —

Элементы используются для определения конкретных отображений из классов Java в таблицы базы данных. Имя класса Java указывается с помощью атрибута name элемента class, а имя таблицы базы данных указывается с помощью атрибута table.

Элемент является необязательным и может использоваться для создания описания класса.

Элемент сопоставляет атрибут уникального идентификатора в классе с первичным ключом таблицы базы данных. Атрибут name элемента id ссылается на свойство в классе, а атрибут column ссылается на столбец в таблице базы данных. Атрибут type содержит тип отображения hibernate, при этом типы отображения преобразуются из Java в тип данных SQL.

Элемент в элементе id используется для автоматической генерации значений первичного ключа. Атрибут class элемента генератора установлен на native, чтобы позволить hibernate подобрать алгоритм идентичности, последовательности или hilo для создания первичного ключа в зависимости от возможностей базовой базы данных.

используется для сопоставления свойства класса Java со столбцом в таблице базы данных. Атрибут имени элемента ссылается на свойство в классе, а атрибут столбца ссылается на столбец в таблице базы данных. Атрибут type содержит тип отображения hibernate, при этом типы отображения преобразуются из Java в тип данных SQL.

Элементы используются для определения конкретных отображений из классов Java в таблицы базы данных. Имя класса Java указывается с помощью атрибута name элемента class, а имя таблицы базы данных указывается с помощью атрибута table.

Элемент является необязательным и может использоваться для создания описания класса.

Элемент сопоставляет атрибут уникального идентификатора в классе с первичным ключом таблицы базы данных. Атрибут name элемента id ссылается на свойство в классе, а атрибут column ссылается на столбец в таблице базы данных. Атрибут type содержит тип отображения hibernate, при этом типы отображения преобразуются из Java в тип данных SQL.

Элемент в элементе id используется для автоматической генерации значений первичного ключа. Атрибут class элемента генератора установлен на native, чтобы позволить hibernate подобрать алгоритм идентичности, последовательности или hilo для создания первичного ключа в зависимости от возможностей базовой базы данных.

используется для сопоставления свойства класса Java со столбцом в таблице базы данных. Атрибут имени элемента ссылается на свойство в классе, а атрибут столбца ссылается на столбец в таблице базы данных. Атрибут type содержит тип отображения hibernate, при этом типы отображения преобразуются из Java в тип данных SQL.

Доступны другие атрибуты и элементы, которые будут использоваться в документе сопоставления, и я постараюсь охватить как можно больше при обсуждении других тем, связанных с Hibernate.

Спящий режим — Типы картографирования

В этой главе перечислены все основные, дата и время, крупный объект и различные другие типы встроенных отображений.

Примитивные типы

Sr.No.Методы и описание сессии
1
Тип отображенияТип JavaТип ANSI SQL
целое числоint или java.lang.IntegerINTEGER
долгодлинный или java.lang.LongBIGINT
короткаякороткий или java.lang.ShortSMALLINT
поплавокплавать или java.lang.FloatFLOAT
двойнойdouble или java.lang. DoubleDOUBLE
big_decimaljava.math.BigDecimalNUMERIC
персонажjava.lang.StringСИМ (1)
строкаjava.lang.StringVARCHAR
байтбайт или java.lang.ByteTINYINT
логическийлогическое или java.lang. булевоНЕМНОГО
да нетлогическое или java.lang. булевоCHAR (1) («Y» или «N»)
истина / ложьлогическое или java.lang. булевоCHAR (1) («T» или «F»)

Типы даты и времени

Тип отображенияТип JavaТип ANSI SQL
Датаjava.util.Date или java.sql.DateДАТА
времяjava.util.Date или java.sql.TimeВРЕМЯ
отметка времениjava.util.Date или java.sql.TimestampTIMESTAMP
календарьjava.util.CalendarTIMESTAMP
calendar_datejava.util.CalendarДАТА

Двоичные и крупные типы объектов

Тип отображенияТип JavaТип ANSI SQL
двоичныйбайт[]VARBINARY (или BLOB)
текстjava.lang.StringCLOB
сериализуемымлюбой класс Java, который реализует java.io.SerializableVARBINARY (или BLOB)
CLOBjava.sql.ClobCLOB
капляjava.sql.Blobбольшой двоичный объект

JDK-связанные типы

Тип отображенияТип JavaТип ANSI SQL
учебный классjava.lang.ClassVARCHAR
место действияjava.util.LocaleVARCHAR
часовой поясjava.util.TimeZoneVARCHAR
валютаjava.util.CurrencyVARCHAR

Hibernate — Примеры

Давайте теперь возьмем пример, чтобы понять, как мы можем использовать Hibernate для обеспечения персистентности Java в автономном приложении. Мы пройдем различные этапы создания приложения Java с использованием технологии Hibernate.

Создать классы POJO

Первым шагом в создании приложения является создание класса или классов Java POJO в зависимости от приложения, которое будет сохранено в базе данных. Давайте рассмотрим наш класс Employee с методами getXXX и setXXX, чтобы сделать его совместимым с JavaBeans классом.

POJO (обычный старый Java-объект) — это Java-объект, который не расширяет и не реализует некоторые специализированные классы и интерфейсы, требуемые инфраструктурой EJB соответственно. Все обычные объекты Java являются POJO.

Когда вы разрабатываете класс для сохранения в Hibernate, важно предоставить совместимый с JavaBeans код, а также один атрибут, который будет работать как индексный атрибут id в классе Employee.

Создать таблицы базы данных

Вторым шагом будет создание таблиц в вашей базе данных. Там будет одна таблица, соответствующая каждому объекту, вы готовы предоставить постоянство. Рассмотрим выше объекты должны быть сохранены и извлечены в следующую таблицу RDBMS —

Создать файл конфигурации сопоставления

На этом этапе создается файл сопоставления, который инструктирует Hibernate, как сопоставить определенный класс или классы с таблицами базы данных.

Элемент является необязательным и может использоваться для создания описания класса.

Элемент сопоставляет атрибут уникального идентификатора в классе с первичным ключом таблицы базы данных. Атрибут name элемента id ссылается на свойство в классе, а атрибут column ссылается на столбец в таблице базы данных. Атрибут type содержит тип отображения hibernate, при этом типы отображения преобразуются из Java в тип данных SQL.

Элемент в элементе id используется для автоматической генерации значений первичного ключа. Атрибут class элемента генератора установлен на native, чтобы позволить hibernate подобрать алгоритм идентификации, последовательности или hilo для создания первичного ключа в зависимости от возможностей базовой базы данных.

используется для сопоставления свойства класса Java со столбцом в таблице базы данных. Атрибут имени элемента ссылается на свойство в классе, а атрибут столбца ссылается на столбец в таблице базы данных. Атрибут type содержит тип отображения hibernate, при этом типы отображения преобразуются из Java в тип данных SQL.

Элемент является необязательным и может использоваться для создания описания класса.

Элемент сопоставляет атрибут уникального идентификатора в классе с первичным ключом таблицы базы данных. Атрибут name элемента id ссылается на свойство в классе, а атрибут column ссылается на столбец в таблице базы данных. Атрибут type содержит тип отображения hibernate, при этом типы отображения преобразуются из Java в тип данных SQL.

Элемент в элементе id используется для автоматической генерации значений первичного ключа. Атрибут class элемента генератора установлен на native, чтобы позволить hibernate подобрать алгоритм идентификации, последовательности или hilo для создания первичного ключа в зависимости от возможностей базовой базы данных.

используется для сопоставления свойства класса Java со столбцом в таблице базы данных. Атрибут имени элемента ссылается на свойство в классе, а атрибут столбца ссылается на столбец в таблице базы данных. Атрибут type содержит тип отображения hibernate, при этом типы отображения преобразуются из Java в тип данных SQL.

Доступны другие атрибуты и элементы, которые будут использоваться в документе сопоставления, и я постараюсь охватить как можно больше при обсуждении других тем, связанных с Hibernate.

Создать класс приложения

Наконец, мы создадим наш класс приложения с методом main () для запуска приложения. Мы будем использовать это приложение для сохранения нескольких записей сотрудника, а затем будем применять операции CRUD к этим записям.

Компиляция и выполнение

Вот шаги для компиляции и запуска вышеупомянутого приложения. Убедитесь, что вы правильно установили PATH и CLASSPATH, прежде чем приступить к компиляции и выполнению.

Создайте файл конфигурации hibernate.cfg.xml, как описано в главе о конфигурации.

Создайте файл сопоставления Employee.hbm.xml, как показано выше.

Создайте исходный файл Employee.java, как показано выше, и скомпилируйте его.

Создайте исходный файл ManageEmployee.java, как показано выше, и скомпилируйте его.

Выполните двоичный файл ManageEmployee, чтобы запустить программу.

Создайте файл конфигурации hibernate.cfg.xml, как описано в главе о конфигурации.

Создайте файл сопоставления Employee.hbm.xml, как показано выше.

Создайте исходный файл Employee.java, как показано выше, и скомпилируйте его.

Создайте исходный файл ManageEmployee.java, как показано выше, и скомпилируйте его.

Выполните двоичный файл ManageEmployee, чтобы запустить программу.

Вы получите следующий результат, и записи будут созданы в таблице EMPLOYEE.

Если вы проверите свою таблицу EMPLOYEE, она должна иметь следующие записи:

Hibernate — O / R Mappings

До сих пор мы видели очень простое отображение O / R, используя hibernate, но есть три наиболее важных темы отображения, которые мы должны изучить подробно.

Коллекции сопоставлений

Если у сущности или класса есть коллекция значений для определенной переменной, то мы можем отобразить эти значения, используя любой из интерфейсов коллекции, доступных в Java. Hibernate может сохранять экземпляры java.util.Map, java.util.Set, java.util.SortedMap, java.util.SortedSet, java.util.List и любой массив постоянных сущностей или значений.

Sr.No.Тип коллекции и описание карт
1java.util.Set

Это сопоставляется с элементом и инициализируется с помощью java.util.HashSet.

Это отображается с помощью элемента и инициализируется с помощью java.util.TreeSet. Атрибут sort может быть установлен как в компараторе, так и в естественном порядке.

Это отображается с помощью элемента или и инициализируется с помощью java.util.ArrayList

Это сопоставляется с элементом и инициализируется с помощью java.util.HashMap.

Это отображается с помощью элемента и инициализируется с помощью java.util.TreeMap. Атрибут sort может быть установлен как в компараторе, так и в естественном порядке.

Это сопоставляется с элементом и инициализируется с помощью java.util.HashSet.

Это отображается с помощью элемента и инициализируется с помощью java.util.TreeSet. Атрибут sort может быть установлен как в компараторе, так и в естественном порядке.

Это отображается с помощью элемента или и инициализируется с помощью java.util.ArrayList

Это сопоставляется с элементом и инициализируется с помощью java.util.HashMap.

Это отображается с помощью элемента и инициализируется с помощью java.util.TreeMap. Атрибут sort может быть установлен как в компараторе, так и в естественном порядке.

Hibernate поддерживает массивы с

Если вы хотите отобразить пользовательские интерфейсы коллекций, которые напрямую не поддерживаются Hibernate, вам нужно сообщить Hibernate о семантике ваших пользовательских коллекций, что не очень просто и не рекомендуется использовать.

Ассоциация сопоставлений

Отображение ассоциаций между классами сущностей и взаимосвязями между таблицами — это душа ORM. Ниже приведены четыре способа, которыми можно выразить кардинальность отношений между объектами. Отображение ассоциации может быть как однонаправленным, так и двунаправленным.

Sr.No.Тип отображения и описание
1Многие-к-одному

Отображение отношений «многие к одному» с использованием Hibernate

Отображение отношений один-к-одному с помощью Hibernate

Отображение отношения один ко многим с помощью Hibernate

Отображение отношений «многие ко многим» с использованием Hibernate

Отображение отношений «многие к одному» с использованием Hibernate

Отображение отношений один-к-одному с помощью Hibernate

Отображение отношения один ко многим с помощью Hibernate

Отображение отношений «многие ко многим» с использованием Hibernate

Сопоставления компонентов

Сопоставление коллекций компонентов также возможно аналогично сопоставлению обычных коллекций с небольшими различиями в конфигурации. Мы увидим эти два отображения подробно с примерами.

Sr.No.Тип отображения и описание
1Сопоставления компонентов

Отображение для класса, имеющего ссылку на другой класс в качестве переменной-члена.

Отображение для класса, имеющего ссылку на другой класс в качестве переменной-члена.

Спящий режим — Аннотации

До сих пор вы видели, как Hibernate использует файл сопоставления XML для преобразования данных из POJO в таблицы базы данных и наоборот. Hibernate аннотации являются новейшим способом определения сопоставлений без использования файла XML. Вы можете использовать аннотации в дополнение или в качестве замены метаданных отображения XML.

Аннотации в спящем режиме — это мощный способ предоставления метаданных для отображения объектов и реляционных таблиц. Все метаданные объединяются в Java-файл POJO вместе с кодом, это помогает пользователю одновременно понимать структуру таблицы и POJO во время разработки.

Если вы собираетесь сделать свое приложение переносимым на другие совместимые с EJB 3 приложения ORM, вы должны использовать аннотации для представления информации о сопоставлении, но, тем не менее, если вы хотите большей гибкости, вам следует использовать сопоставления на основе XML.

Настройка среды для спящего аннотации

Прежде всего вам необходимо убедиться, что вы используете JDK 5.0, в противном случае вам нужно обновить JDK до JDK 5.0, чтобы воспользоваться встроенной поддержкой аннотаций.

Во-вторых, вам нужно установить дистрибутив аннотаций Hibernate 3.x, доступный из sourceforge: ( Скачать аннотацию Hibernate ), и скопировать hibernate-annotations.jar, lib / hibernate-comons-annotations.jar и lib / ejb3-persistence. jar из дистрибутива Hibernate Annotations для вашего CLASSPATH.

Пример аннотированного класса

Как я упоминал выше при работе с Hibernate Annotation, все метаданные объединяются в Java-файл POJO вместе с кодом, это помогает пользователю одновременно понимать структуру таблицы и POJO во время разработки.

Предположим, мы собираемся использовать следующую таблицу EMPLOYEE для хранения наших объектов:

Ниже приведено сопоставление класса Employee с аннотациями для сопоставления объектов с определенной таблицей EMPLOYEE.

Hibernate обнаруживает, что аннотация @Id находится в поле, и предполагает, что он должен обращаться к свойствам объекта напрямую через поля во время выполнения. Если вы поместите аннотацию @Id в метод getId (), вы по умолчанию разрешите доступ к свойствам через методы getter и setter. Следовательно, все остальные аннотации также размещаются в полях или методах получения в соответствии с выбранной стратегией.

Следующий раздел объяснит аннотации, используемые в вышеприведенном классе.

@Entity Annotation

@Table Annotation

Аннотация @Table позволяет вам указать детали таблицы, которая будет использоваться для сохранения сущности в базе данных.

Аннотация @Table предоставляет четыре атрибута, позволяющих переопределить имя таблицы, ее каталог и ее схему, а также применить уникальные ограничения для столбцов в таблице. На данный момент мы используем только имя таблицы, которая является EMPLOYEE.

Аннотации @Id и @GeneratedValue

@ Колонка Аннотация

Аннотация @Column используется для указания сведений о столбце, в который будет отображаться поле или свойство. Вы можете использовать аннотацию столбца со следующими наиболее часто используемыми атрибутами:

Атрибут name позволяет явно указать имя столбца.

Атрибут length разрешает размер столбца, используемого для сопоставления значения, особенно для значения String.

Атрибут nullable позволяет пометить столбец NOT NULL при создании схемы.

Атрибут unique позволяет пометить столбец как содержащий только уникальные значения.

Атрибут name позволяет явно указать имя столбца.

Атрибут length разрешает размер столбца, используемого для сопоставления значения, особенно для значения String.

Атрибут nullable позволяет пометить столбец NOT NULL при создании схемы.

Атрибут unique позволяет пометить столбец как содержащий только уникальные значения.

Создать класс приложения

Наконец, мы создадим наш класс приложения с методом main () для запуска приложения. Мы будем использовать это приложение для сохранения нескольких записей сотрудника, а затем будем применять операции CRUD к этим записям.

Конфигурация базы данных

Теперь давайте создадим файл конфигурации hibernate.cfg.xml для определения параметров, связанных с базой данных.

Компиляция и выполнение

Вот шаги для компиляции и запуска вышеупомянутого приложения. Убедитесь, что вы правильно установили PATH и CLASSPATH, прежде чем приступить к компиляции и выполнению.

Удалите файл сопоставления Employee.hbm.xml из пути.

Создайте исходный файл Employee.java, как показано выше, и скомпилируйте его.

Создайте исходный файл ManageEmployee.java, как показано выше, и скомпилируйте его.

Выполните двоичный файл ManageEmployee, чтобы запустить программу.

Удалите файл сопоставления Employee.hbm.xml из пути.

Создайте исходный файл Employee.java, как показано выше, и скомпилируйте его.

Создайте исходный файл ManageEmployee.java, как показано выше, и скомпилируйте его.

Выполните двоичный файл ManageEmployee, чтобы запустить программу.

Вы получите следующий результат, и записи будут созданы в таблице EMPLOYEE.

Если вы проверите свою таблицу EMPLOYEE, она должна иметь следующие записи:

Hibernate — Язык запросов

Hibernate Query Language (HQL) — это объектно-ориентированный язык запросов, похожий на SQL, но вместо работы с таблицами и столбцами HQL работает с постоянными объектами и их свойствами. HQL-запросы преобразуются Hibernate в обычные SQL-запросы, которые, в свою очередь, выполняют действия с базой данных.

Хотя вы можете использовать операторы SQL непосредственно с Hibernate, используя Native SQL, но я бы порекомендовал использовать HQL, когда это возможно, чтобы избежать проблем с переносимостью баз данных и воспользоваться преимуществами стратегий генерации и кэширования SQL в Hibernate.

Ключевые слова, такие как SELECT, FROM, WHERE и т. Д., Не чувствительны к регистру, но такие свойства, как имена таблиц и столбцов, чувствительны к регистру в HQL.

ОТ клаузулы

Если вам нужно полностью указать имя класса в HQL, просто укажите пакет и имя класса следующим образом:

AS пункт

Предложение AS можно использовать для назначения псевдонимов классам в ваших HQL-запросах, особенно если у вас длинные запросы. Например, наш предыдущий простой пример будет следующим:

Ключевое слово AS является необязательным, и вы также можете указать псевдоним непосредственно после имени класса, как показано ниже:

ВЫБРАТЬ пункт

Предложение SELECT обеспечивает больший контроль над результирующим набором, чем предложение from. Если вы хотите получить несколько свойств объектов вместо всего объекта, используйте предложение SELECT. Ниже приведен простой синтаксис использования предложения SELECT для получения только поля first_name объекта Employee.

Следует отметить, что Employee.firstName является свойством объекта Employee, а не полем таблицы EMPLOYEE.

ГДЕ оговорка

Если вы хотите сузить конкретные объекты, которые возвращаются из хранилища, используйте предложение WHERE. Ниже приведен простой синтаксис использования предложения WHERE:

ЗАКАЗАТЬ по пункту

Если вы хотите отсортировать по более чем одному свойству, вы просто добавите дополнительные свойства в конец предложения по предложению, разделенные запятыми следующим образом:

Предложение GROUP BY

Этот пункт позволяет Hibernate извлекать информацию из базы данных и группировать ее по значению атрибута и, как правило, использовать результат для включения совокупного значения. Ниже приведен простой синтаксис использования предложения GROUP BY —

Использование именованных параметров

Hibernate поддерживает именованные параметры в своих HQL-запросах. Это облегчает написание HQL-запросов, которые принимают ввод от пользователя, и вам не нужно защищаться от атак SQL-инъекций. Ниже приведен простой синтаксис использования именованных параметров —

ОБНОВЛЕНИЕ

Массовые обновления являются новыми для HQL с Hibernate 3, и удаляют работу в Hibernate 3 иначе, чем в Hibernate 2. Интерфейс Query теперь содержит метод executeUpdate () для выполнения операторов HQL UPDATE или DELETE.

Предложение UPDATE может использоваться для обновления одного или нескольких свойств одного или нескольких объектов. Ниже приведен простой синтаксис использования предложения UPDATE —

УДАЛИТЬ пункт

Предложение DELETE может использоваться для удаления одного или нескольких объектов. Ниже приведен простой синтаксис использования предложения DELETE:

Вставить пункт

HQL поддерживает предложение INSERT INTO только тогда, когда записи могут быть вставлены из одного объекта в другой. Ниже приведен простой синтаксис использования предложения INSERT INTO:

Агрегатные методы

HQL поддерживает ряд агрегатных методов, похожих на SQL. Они работают так же, как в HQL, так и в SQL, и ниже приведен список доступных функций:

avg (название объекта)

Средняя стоимость имущества

считать (имя свойства или *)

Сколько раз свойство встречается в результатах

Максимальное значение значения свойства

мин (название объекта)

Минимальное значение значения свойства

сумма (название объекта)

Общая сумма стоимости имущества

avg (название объекта)

Средняя стоимость имущества

считать (имя свойства или *)

Сколько раз свойство встречается в результатах

Максимальное значение значения свойства

мин (название объекта)

Минимальное значение значения свойства

сумма (название объекта)

Общая сумма стоимости имущества

Отдельное ключевое слово учитывает только уникальные значения в наборе строк. Следующий запрос вернет только уникальный счет —

Нумерация страниц с использованием запроса

Существует два метода интерфейса Query для разбивки на страницы.

Sr.No.Функции и описание
1

Запрос setFirstResult (int startPosition)

Этот метод принимает целое число, представляющее первую строку в вашем наборе результатов, начиная со строки 0.

Запрос setMaxResults (int maxResult)

Этот метод сообщает Hibernate о получении фиксированного числа maxResults объектов.

Запрос setFirstResult (int startPosition)

Этот метод принимает целое число, представляющее первую строку в вашем наборе результатов, начиная со строки 0.

Запрос setMaxResults (int maxResult)

Этот метод сообщает Hibernate о получении фиксированного числа maxResults объектов.

Используя два вышеупомянутых метода вместе, мы можем создать пейджинговый компонент в нашем веб-приложении или приложении Swing. Ниже приведен пример, который вы можете расширить, чтобы получить 10 строк за раз:

Hibernate — Критерии Запросы

Hibernate предоставляет альтернативные способы управления объектами и, в свою очередь, данными, доступными в таблицах RDBMS. Одним из методов является Criteria API, который позволяет программно создавать объект запроса критериев, в котором можно применять правила фильтрации и логические условия.

Ниже приведен простейший пример критерия запроса, который просто возвращает каждый объект, соответствующий классу Employee.

Ограничения с критериями

Вы можете использовать метод add (), доступный для объекта Criteria, чтобы добавить ограничение для запроса критерия. Ниже приведен пример добавления ограничения для возврата записей с зарплатой, равной 2000 —

Ниже приведены еще несколько примеров, охватывающих различные сценарии и могут использоваться в соответствии с требованием:

Вы можете создать условия И или ИЛИ, используя ограничения LogicalExpression следующим образом:

Хотя все вышеперечисленные условия могут быть использованы непосредственно с HQL, как описано в предыдущем уроке.

Нумерация страниц по критериям

Существует два метода интерфейса Criteria для разбивки на страницы.

Sr.No.Метод и описание
1

общедоступные критерии setFirstResult (int firstResult)

Этот метод принимает целое число, представляющее первую строку в вашем наборе результатов, начиная со строки 0.

общедоступные критерии setMaxResults (int maxResults)

Этот метод сообщает Hibernate о получении фиксированного числа maxResults объектов.

общедоступные критерии setFirstResult (int firstResult)

Этот метод принимает целое число, представляющее первую строку в вашем наборе результатов, начиная со строки 0.

общедоступные критерии setMaxResults (int maxResults)

Этот метод сообщает Hibernate о получении фиксированного числа maxResults объектов.

Используя два вышеупомянутых метода вместе, мы можем создать пейджинговый компонент в нашем веб-приложении или приложении Swing. Ниже приведен пример, который вы можете расширить, чтобы получить 10 строк за раз:

Сортировка результатов

API Criteria предоставляет класс org.hibernate.criterion.Order для сортировки набора результатов в порядке возрастания или убывания в соответствии с одним из свойств вашего объекта. В этом примере показано, как использовать класс Order для сортировки набора результатов.

Прогнозы и агрегаты

Ниже приведены несколько примеров, охватывающих различные сценарии и могут использоваться в соответствии с требованиями:

Пример критериев запросов

Рассмотрим следующий класс POJO —

Давайте создадим следующую таблицу EMPLOYEE для хранения объектов Employee —

Ниже будет файл сопоставления.

Наконец, мы создадим наш класс приложения с методом main () для запуска приложения, в котором мы будем использовать запросы Criteria.

Компиляция и выполнение

Вот шаги для компиляции и запуска вышеупомянутого приложения. Убедитесь, что вы правильно установили PATH и CLASSPATH, прежде чем приступить к компиляции и выполнению.

Создайте файл конфигурации hibernate.cfg.xml, как описано в главе о конфигурации.

Создайте файл сопоставления Employee.hbm.xml, как показано выше.

Создайте исходный файл Employee.java, как показано выше, и скомпилируйте его.

Создайте исходный файл ManageEmployee.java, как показано выше, и скомпилируйте его.

Выполните двоичный файл ManageEmployee, чтобы запустить программу.

Создайте файл конфигурации hibernate.cfg.xml, как описано в главе о конфигурации.

Создайте файл сопоставления Employee.hbm.xml, как показано выше.

Создайте исходный файл Employee.java, как показано выше, и скомпилируйте его.

Создайте исходный файл ManageEmployee.java, как показано выше, и скомпилируйте его.

Выполните двоичный файл ManageEmployee, чтобы запустить программу.

Вы получите следующий результат, и записи будут созданы в таблице EMPLOYEE.

Если вы проверите свою таблицу EMPLOYEE, она должна иметь следующие записи:

Hibernate — собственный SQL

Вы можете использовать собственный SQL для выражения запросов к базе данных, если хотите использовать специфичные для базы данных функции, такие как подсказки запросов или ключевое слово CONNECT в Oracle. Hibernate 3.x позволяет указывать рукописный SQL, включая хранимые процедуры, для всех операций создания, обновления, удаления и загрузки.

Ваше приложение создаст собственный запрос SQL из сеанса с помощью метода createSQLQuery () в интерфейсе сеанса —

После передачи строки, содержащей запрос SQL, в метод createSQLQuery () можно связать результат SQL с существующей сущностью Hibernate, объединением или скалярным результатом, используя методы addEntity (), addJoin () и addScalar (). соответственно.

Скалярные Запросы

Самый простой запрос SQL — это получить список скаляров (значений) из одной или нескольких таблиц. Ниже приведен синтаксис использования собственного SQL для скалярных значений:

Entity Queries

Все вышеперечисленные запросы касались возврата скалярных значений, в основном возвращая «сырые» значения из набора результатов. Ниже приведен синтаксис для получения объектов сущности в целом из собственного SQL-запроса с помощью addEntity ().

Именованные SQL-запросы

Ниже приведен синтаксис для получения объектов сущности из собственного SQL-запроса с помощью addEntity () и использования именованного SQL-запроса.

Пример собственного SQL

Рассмотрим следующий класс POJO —

Давайте создадим следующую таблицу EMPLOYEE для хранения объектов Employee —

Ниже будет файл сопоставления —

Наконец, мы создадим наш класс приложения с методом main () для запуска приложения, в котором мы будем использовать собственные запросы SQL

Компиляция и выполнение

Вот шаги для компиляции и запуска вышеупомянутого приложения. Убедитесь, что вы правильно установили PATH и CLASSPATH, прежде чем приступить к компиляции и выполнению.

Создайте файл конфигурации hibernate.cfg.xml, как описано в главе о конфигурации.

Создайте файл сопоставления Employee.hbm.xml, как показано выше.

Создайте исходный файл Employee.java, как показано выше, и скомпилируйте его.

Создайте исходный файл ManageEmployee.java, как показано выше, и скомпилируйте его.

Выполните двоичный файл ManageEmployee, чтобы запустить программу.

Создайте файл конфигурации hibernate.cfg.xml, как описано в главе о конфигурации.

Создайте файл сопоставления Employee.hbm.xml, как показано выше.

Создайте исходный файл Employee.java, как показано выше, и скомпилируйте его.

Создайте исходный файл ManageEmployee.java, как показано выше, и скомпилируйте его.

Выполните двоичный файл ManageEmployee, чтобы запустить программу.

Вы получите следующий результат, и записи будут созданы в таблице EMPLOYEE.

Если вы проверите свою таблицу EMPLOYEE, она должна иметь следующие записи:

Hibernate — Кэширование

Кэширование — это механизм повышения производительности системы. Это буферная память, которая лежит между приложением и базой данных. Кэш-память хранит недавно использованные элементы данных, чтобы максимально уменьшить количество обращений к базе данных.

Кеширование также важно для Hibernate. Он использует многоуровневую схему кэширования, как описано ниже —

hibernate что это такое. Смотреть фото hibernate что это такое. Смотреть картинку hibernate что это такое. Картинка про hibernate что это такое. Фото hibernate что это такое

Кэш первого уровня

Кэш первого уровня — это кэш сеанса, который является обязательным кешем, через который должны проходить все запросы. Объект Session держит объект в своих собственных полномочиях, прежде чем зафиксировать его в базе данных.

Если вы выпускаете несколько обновлений для объекта, Hibernate пытается отложить выполнение обновления как можно дольше, чтобы уменьшить количество выпущенных операторов SQL обновления. Если вы закроете сеанс, все кэшируемые объекты будут потеряны и сохранены или обновлены в базе данных.

Кэш второго уровня

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

Кэш на уровне запросов

Hibernate также реализует кеш для наборов результатов запросов, который тесно интегрируется с кешем второго уровня.

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

Кэш второго уровня

Hibernate по умолчанию использует кэш первого уровня, и вам нечего делать, чтобы использовать кэш первого уровня. Давайте перейдем прямо к дополнительному кешу второго уровня. Не все классы получают выгоду от кэширования, поэтому важно иметь возможность отключить кэш второго уровня.

Кэш второго уровня Hibernate настраивается в два этапа. Сначала вы должны решить, какую стратегию параллелизма использовать. После этого вы настраиваете срок действия и физические атрибуты кеша с помощью провайдера кеша.

Стратегии параллелизма

Стратегия параллелизма — это посредник, который отвечает за хранение элементов данных в кэше и извлечение их из кэша. Если вы собираетесь включить кэш второго уровня, вам придется решить, для каждого постоянного класса и коллекции, какую стратегию параллельного использования кэша использовать.

Транзакционный. Используйте эту стратегию для данных, предназначенных главным образом для чтения, где важно предотвратить устаревшие данные в параллельных транзакциях в редких случаях обновления.

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

Nonstrict-read-write — эта стратегия не гарантирует согласованности между кешем и базой данных. Используйте эту стратегию, если данные почти никогда не изменяются и небольшая вероятность устаревших данных не является критической проблемой.

Только для чтения — стратегия параллелизма, подходящая для данных, которая никогда не изменяется. Используйте его только для справочных данных.

Транзакционный. Используйте эту стратегию для данных, предназначенных главным образом для чтения, где важно предотвратить устаревшие данные в параллельных транзакциях в редких случаях обновления.

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

Nonstrict-read-write — эта стратегия не гарантирует согласованности между кешем и базой данных. Используйте эту стратегию, если данные почти никогда не изменяются и небольшая вероятность устаревших данных не является критической проблемой.

Только для чтения — стратегия параллелизма, подходящая для данных, которая никогда не изменяется. Используйте его только для справочных данных.

Атрибут use = «read-write» указывает Hibernate использовать стратегию параллельного чтения и записи для определенного кэша.

Поставщик кэша

Следующим шагом после рассмотрения стратегий параллелизма станет использование классов-кандидатов в кэш для выбора поставщика кеша. Hibernate заставляет вас выбирать одного поставщика кеша для всего приложения.

Sr.No.Метод и описание
1

Он может кэшироваться в памяти или на диске, а также в кластерном кэшировании и поддерживает дополнительный кэш результатов запроса Hibernate.

Поддерживает кэширование в память и на диск в одной JVM с богатым набором политик истечения срока действия и поддержкой кэша запросов.

Кластерный кеш на основе JGroups. Он использует кластеризованную аннулирование, но не поддерживает кэш запросов Hibernate.

Полностью транзакционный реплицируемый кластерный кеш, также основанный на многоадресной библиотеке JGroups. Он поддерживает репликацию или аннулирование, синхронную или асинхронную связь, а также оптимистическую и пессимистическую блокировки. Кеш запросов Hibernate поддерживается.

Он может кэшироваться в памяти или на диске, а также в кластерном кэшировании и поддерживает дополнительный кэш результатов запроса Hibernate.

Поддерживает кэширование в память и на диск в одной JVM с богатым набором политик истечения срока действия и поддержкой кэша запросов.

Кластерный кеш на основе JGroups. Он использует кластеризованную аннулирование, но не поддерживает кэш запросов Hibernate.

Полностью транзакционный реплицируемый кластерный кеш, также основанный на многоадресной библиотеке JGroups. Он поддерживает репликацию или аннулирование, синхронную или асинхронную связь, а также оптимистическую и пессимистическую блокировки. Кеш запросов Hibernate поддерживается.

Каждый поставщик кэша не совместим с любой стратегией параллелизма. Следующая матрица совместимости поможет вам выбрать подходящую комбинацию.

Sr.No.Имя и описание кэша
1
Стратегия / ProviderТолько для чтенияNonstrictread-записиЧитай пишитранзакционный
EHCacheИксИксИкс
OSCacheИксИксИкс
SwarmCacheИксИкс
JBoss CacheИксИкс

Вы будете указывать поставщика кеша в файле конфигурации hibernate.cfg.xml. Мы выбираем EHCache в качестве нашего поставщика кэша второго уровня —

Вот и все, теперь у нас включено кэширование второго уровня для класса Employee, а Hibernate теперь обращается к кэшу второго уровня, когда вы переходите к Employee или когда вы загружаете Employee по идентификатору.

Вы должны проанализировать все свои классы и выбрать подходящую стратегию кэширования для каждого из классов. Иногда кэширование второго уровня может снизить производительность приложения. Поэтому рекомендуется сначала провести сравнительный анализ вашего приложения, не включая кэширование, а затем включите хорошо подходящее кэширование и проверьте производительность. Если кэширование не улучшает производительность системы, то нет смысла включать любой тип кэширования.

Кэш на уровне запросов

Чтобы использовать кэш запросов, сначала необходимо активировать его, используя свойство hibernate.cache.use_query_cache = «true» в файле конфигурации. Установив для этого свойства значение true, вы заставляете Hibernate создавать необходимые кеши в памяти для хранения наборов запросов и идентификаторов.

Далее, чтобы использовать кеш запросов, вы используете метод setCacheable (Boolean) класса Query. Например —

Hibernate также поддерживает очень тонкую поддержку кэша благодаря концепции области кэша. Регион кеша является частью кеша, которому дано имя.

Этот код использует метод, чтобы сообщить Hibernate хранить и искать запрос в области кэша сотрудников.

Hibernate — Пакетная обработка

Рассмотрим ситуацию, когда вам нужно загрузить большое количество записей в вашу базу данных с помощью Hibernate. Ниже приведен фрагмент кода для достижения этой цели с помощью Hibernate —

По умолчанию Hibernate будет кэшировать все сохраненные объекты в кэше на уровне сеанса, и в конечном итоге ваше приложение будет сброшено с OutOfMemoryException где-то около 50 000-й строки. Вы можете решить эту проблему, если вы используете пакетную обработку с Hibernate.

Чтобы использовать функцию пакетной обработки, сначала установите hibernate.jdbc.batch_size в качестве размера пакета равным 20 или 50, в зависимости от размера объекта. Это сообщит Hibernate контейнеру, что каждые X строк должны быть вставлены в пакетном режиме. Чтобы реализовать это в вашем коде, нам нужно будет сделать небольшое изменение следующим образом:

Приведенный выше код будет нормально работать для операции INSERT, но если вы захотите выполнить операцию UPDATE, вы можете добиться с помощью следующего кода:

Пример пакетной обработки

Давайте изменим файл конфигурации, добавив свойство hibernate.jdbc.batch_size

Рассмотрим следующий класс сотрудников POJO —

Давайте создадим следующую таблицу EMPLOYEE для хранения объектов Employee —

Ниже будет файл сопоставления для сопоставления объектов Employee с таблицей EMPLOYEE —

Наконец, мы создадим наш класс приложения с методом main () для запуска приложения, в котором мы будем использовать методы flush () и clear (), доступные в объекте Session, чтобы Hibernate продолжал записывать эти записи в базу данных, а не кэшировать их в объем памяти.

Компиляция и выполнение

Вот шаги для компиляции и запуска вышеупомянутого приложения. Убедитесь, что вы правильно установили PATH и CLASSPATH, прежде чем приступить к компиляции и выполнению.

Создайте файл конфигурации hibernate.cfg.xml, как описано выше.

Создайте файл сопоставления Employee.hbm.xml, как показано выше.

Создайте исходный файл Employee.java, как показано выше, и скомпилируйте его.

Создайте исходный файл ManageEmployee.java, как показано выше, и скомпилируйте его.

Выполните двоичный файл ManageEmployee, чтобы запустить программу, которая создаст 100000 записей в таблице EMPLOYEE.

Создайте файл конфигурации hibernate.cfg.xml, как описано выше.

Создайте файл сопоставления Employee.hbm.xml, как показано выше.

Создайте исходный файл Employee.java, как показано выше, и скомпилируйте его.

Создайте исходный файл ManageEmployee.java, как показано выше, и скомпилируйте его.

Выполните двоичный файл ManageEmployee, чтобы запустить программу, которая создаст 100000 записей в таблице EMPLOYEE.

Hibernate — Перехватчики

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

Таким образом, объект проходит через различные этапы своего жизненного цикла, и интерфейс перехватчика предоставляет методы, которые можно вызывать на различных этапах для выполнения некоторых необходимых задач. Эти методы являются обратными вызовами от сеанса к приложению, позволяя приложению проверять и / или манипулировать свойствами постоянного объекта перед его сохранением, обновлением, удалением или загрузкой. Ниже приведен список всех методов, доступных в интерфейсе Interceptor.

Этот метод вызывается, когда метод flush () вызывается для объекта Session.

Этот метод вызывается, когда создается экземпляр постоянного класса.

Этот метод вызывается, когда объект передается методу saveOrUpdate () /

Этот метод вызывается перед удалением объекта.

Этот метод вызывается, когда Hibernate обнаруживает, что объект загрязнен (то есть был изменен) во время сброса, т.е. операции обновления.

Этот метод вызывается до инициализации объекта.

Этот метод вызывается перед сохранением объекта.

Этот метод вызывается после сброса и обновления объекта в памяти.

Этот метод вызывается перед сбросом.

Этот метод вызывается, когда метод flush () вызывается для объекта Session.

Этот метод вызывается, когда создается экземпляр постоянного класса.

Этот метод вызывается, когда объект передается методу saveOrUpdate () /

Этот метод вызывается перед удалением объекта.

Этот метод вызывается, когда Hibernate обнаруживает, что объект загрязнен (то есть был изменен) во время сброса, т.е. операции обновления.

Этот метод вызывается до инициализации объекта.

Этот метод вызывается перед сохранением объекта.

Этот метод вызывается после сброса и обновления объекта в памяти.

Этот метод вызывается перед сбросом.

Hibernate Interceptor дает нам полный контроль над тем, как объект будет выглядеть как для приложения, так и для базы данных.

Как использовать перехватчики?

Создать перехватчики

Создать классы POJO

Теперь давайте немного изменим наш первый пример, в котором мы использовали таблицу EMPLOYEE и класс Employee для игры —

Создать таблицы базы данных

Вторым шагом будет создание таблиц в вашей базе данных. Там будет одна таблица, соответствующая каждому объекту, вы готовы предоставить постоянство. Рассмотрим объекты, описанные выше, которые необходимо сохранить и извлечь в следующую таблицу RDBMS —

Создать файл конфигурации сопоставления

На этом этапе создается файл сопоставления, который инструктирует Hibernate — как сопоставить определенный класс или классы с таблицами базы данных.

Создать класс приложения

Наконец, мы создадим наш класс приложения с методом main () для запуска приложения. Здесь следует отметить, что при создании объекта сеанса мы использовали наш класс Interceptor в качестве аргумента.

Компиляция и выполнение

Вот шаги для компиляции и запуска вышеупомянутого приложения. Убедитесь, что вы правильно установили PATH и CLASSPATH, прежде чем приступить к компиляции и выполнению.

Создайте файл конфигурации hibernate.cfg.xml, как описано в главе о конфигурации.

Создайте файл сопоставления Employee.hbm.xml, как показано выше.

Создайте исходный файл Employee.java, как показано выше, и скомпилируйте его.

Создайте исходный файл MyInterceptor.java, как показано выше, и скомпилируйте его.

Создайте исходный файл ManageEmployee.java, как показано выше, и скомпилируйте его.

Выполните двоичный файл ManageEmployee, чтобы запустить программу.

Создайте файл конфигурации hibernate.cfg.xml, как описано в главе о конфигурации.

Создайте файл сопоставления Employee.hbm.xml, как показано выше.

Создайте исходный файл Employee.java, как показано выше, и скомпилируйте его.

Создайте исходный файл MyInterceptor.java, как показано выше, и скомпилируйте его.

Создайте исходный файл ManageEmployee.java, как показано выше, и скомпилируйте его.

Выполните двоичный файл ManageEmployee, чтобы запустить программу.

Вы получите следующий результат, и записи будут созданы в таблице EMPLOYEE.

Если вы проверите свою таблицу EMPLOYEE, она должна иметь следующие записи:

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Sr.No.Метод и описание
1