Hibernate framework что это

Обновлено: 04.07.2024

Вопросы и ответы на собеседование по теме Hibernate Framework. Часть 1.

к списку вопросов раздела JEE

Вопросы

1. Что такое Hibernate Framework?
2. Какие важные преимущества дает использование Hibernate Framework?
3. Какие преимущества Hibernate над JDBC?
4. Назовите некоторые важные интерфейсы Hibernate.
5. Что такое конфигурационный файл Hibernate?
6. Что такое Hibernate mapping file?
7. Назовите некоторые важные аннотации, используемые для отображения в Hibernate.
8. Что вы знаете о Hibernate SessionFactory и как его сконфигурировать?
9. Является ли Hibernate SessionFactory потокобезопасным?
10. Как получить Hibernate Session и что это такое?
11. Является ли Hibernate Session потокобезопасным?
12. В чем разница между openSession и getCurrentSession?
13. Какая разница между методами Hibernate Session get() и load()?
14. Что вы знаете о кэшировании в Hibernate? Объясните понятие кэш первого уровня в Hibernate?
15. Как настроить кэш второго уровня в Hibernate с помощью EHCache?
16. Какие существуют различные состояния у entity bean?
17. Как используется вызов метода Hibernate Session merge()?
18. В чем разница между Hibernate save(), saveOrUpdate() и persist()?
19. Что произойдет, если будет отсутствовать конструктор без аргументов у Entity Bean?
20. В чем разница между sorted collection и ordered collection? Какая из них лучше?
21. Какие типы коллекций в Hibernate вы знаете?
22. Как реализованы Join’ы Hibernate?
23. Почему мы не должны делать Entity class как final?
24. Что вы знаете о HQL и какие его преимущества?
25. Что такое Query Cache в Hibernate?
26. Можем ли мы выполнить нативный запрос SQL (sql native) в Hibernate?
27. Назовите преимущества поддержки нативного sql в Hibernate.
28. Что такое Named SQL Query?
29. Какие преимущества Named SQL Query?
30. Расскажите о преимуществах использования Hibernate Criteria API.

31. Как логировать созданные Hibernate SQL запросы в лог-файлы?
32. Что вы знаете о Hibernate прокси и как это помогает в ленивой загрузке (lazy load)?
33. Как реализованы отношения в Hibernate?
34. Как управлять транзакциями с помощью Hibernate?
35. Что такое каскадные связи (обновления) и какие каскадные типы есть в Hibernate?
36. Как добавить логирование log4j в Hibernate приложение?
37. Как использовать JNDI DataSource сервера приложений с Hibernate Framework?
38. Как интегрировать Hibernate и Spring?
39. Что вы знаете о классе HibernateTemplate?
40. Как интегрировать Hibernate с Servlet или Struts2 веб приложением?
41. Какие паттерны применяются в Hibernate?
42. Расскажите о Hibernate Validator Framework.
43. Какие преимущества дает использование плагина Hibernate Tools Eclipse?
44. Best Practices в Hibernate.

Ответы

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

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

2. Какие важные преимущества дает использование Hibernate Framework?

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

3. Какие преимущества Hibernate над JDBC?

Hibernate имеет ряд преимуществ перед JDBC API:

4. Назовите некоторые важные интерфейсы Hibernate.

5. Что такое конфигурационный файл Hibernate?

Файл конфигурации Hibernate содержит в себе данные о базе данных и необходим для инициализации SessionFactory. В .xml файле необходимо указать вендора базы данных или JNDI ресурсы, а так же информацию об используемом диалекте, что поможет hibernate выбрать режим работы с конкретной базой данных.

6. Что такое Hibernate mapping file?

Файл отображения (mapping file) используется для связи entity бинов и колонок в таблице базы данных. В случаях, когда не используются аннотации JPA, файл отображения .xml может быть полезен (например при использовании сторонних библиотек).

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

Hibernate поддерживает как аннотации из JPA, так и свои собственные, которые находятся в пакете org.hibernate.annotations. Наиболее важные аннотации JPA и Hibernate:

8. Что вы знаете о Hibernate SessionFactory и как его сконфигурировать?

SessionFactory является фабрикой классов и используется для получения объектов session. SessionFactory отвечает за считывание параметров конфигурации Hibernate и подключение к базе данных. Обычно в приложении имеется только один экземпляр SessionFactory и потоки, обслуживающие клиентские запросы, получают экземпляры session с помощью объекта SessionFactory. Внутреннее состояние SessionFactory неизменно (immutable). Internal state (внутреннее состояние) включает в себя все метаданные об Object/ Relational Mapping и задается при создании SessionFactory.

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

9. Является ли Hibernate SessionFactory потокобезопасным?

Т.к. объект SessionFactory immutable (неизменяемый), то да, он потокобезопасный. Множество потоков может обращаться к одному объекту одновременно.

10. Как получить Hibernate Session и что это такое?

Объект Hibernate Session является связью между кодом java приложения и hibernate. Это основной интерфейс для выполнения операций с базой данных. Жизненный цикл объекта session связан с началом и окончанием транзакции. Этот объект предоставляет методы для CRUD ( create , read , update , delete ) операций для объекта персистентности. С помощью этого экземпляра можно выполнять HQL, SQL запросы и задавать критерии выборки.

11. Является ли Hibernate Session потокобезопасным?

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

12. В чем разница между openSession и getCurrentSession?

Hibernate SessionFactory getCurrentSession() возвращает сессию, связанную с контекстом. Но для того, чтобы это работало, нам нужно настроить его в конфигурационном файле hibernate. Так как этот объект session связан с контекстом hibernate, то отпадает необходимость к его закрытию. Объект session закрывается вместе с закрытием SessionFactory .

hibernate5 tutorial

В этой статье я постараюсь максимально просто объяснить Вам что такое hibernate фреймворк:

  • что он из себя представляет;
  • как пользоваться hibernate;
  • CRUD операции на примере простой таблицы.

Все вышеперечисленное закрепим примером. А для начала постараемся вникнуть в теорию.

Потом писали метод подключения к базе, возможно даже пул соединений. Далее был DAO класс в котором делался запрос в базу, доставались или создавались данные, распарсивали их и подавали в виде списка или объекта примерно вот таким образом:

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

С теорией закончили. Теперь давайте узнаем как подключить Hibernate, мапить классы и делать простые запросы.

Начнем с нуля. Создадим простое Maven приложение. Если Вы используете Eclipse: File->New->Maven project.

new simple maven project

Не забудьте проставить галочку возле Create a simple project. Даем нашему проекту название:

hibernate project creation

Далее нужно подключить библиотеку hibernate, JPA и драйвера к базе данных к нашему проекту. В данном примере я использую Postgresql, но разницы не будет никакой если Вы будете использовать другую базу данных. Я укажу место, где нужно будет сделать поправки.

После подключения зависимостей мой файл pom.xml выглядит так:

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

psql shell

С этим, думаю, проблем не будет.

Теперь создадим класс Users в котором будут поля, геттеры, сеттеры, методы equals, hashCode, toString.

Теперь на подобии коннектора подключений нужно указать настройки hibernate, чтобы библиотека знала с какой базой мы работаем, логин, пароль и тип базы. Создадим класс HibernateUtill и добавим в него немного магии.

import java.util.HashMap ;
import java.util.Map ;

import org.hibernate.SessionFactory ;
import org.hibernate.boot.Metadata ;
import org.hibernate.boot.MetadataSources ;
import org.hibernate.boot.registry.StandardServiceRegistry ;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder ;
import org.hibernate.cfg.Environment ;

private static StandardServiceRegistry registry ;
private static SessionFactory sessionFactory ;

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

Далее создадим простой класс-сервис по CRUD операциям с сущностью Users.

import javax.persistence.criteria.CriteriaQuery ;
import javax.transaction.Transactional ;

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

Теперь осталось протестировать наши методы.

Ну и результат запуска приложения:

что такое hibernate

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

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

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

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

  • позволяет разработчику сосредоточиться на бизнес логике, не отвлекаясь на управление ресурсами;
  • предоставляет собственный язык запросов (HQL), внешне похожий на SQL. Необходимо отметить, что HQL полностью объектно-ориентирован и понимает такие принципы, как наследование, полиморфизм и ассоциации (связи);
  • может использовать также чистый SQL, а, следовательно, поддерживает возможность оптимизации запросов и работы с любым сторонним провайдером БД;
  • поддерживает JPA аннотации, что позволяет сделать реализацию кода независимой;
  • поддерживает разные уровни cache, а следовательно может повысить производительность;
  • поддерживает ленивую инициализацию используя proxy объекты и выполняя запросы к базе данных только по необходимости;
  • интегрируется с другими Java EE фреймворками; например, Spring Framework поддерживает встроенную интеграцию с Hibernate;
  • является широко распространенным open source продуктом. Благодаря этому доступны тысячи открытых статей, примеров, а также документация по использованию фреймворка.

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

Файл отображения (mapping file) используется для связи entity бинов с таблицами базы данных. Содержимое файла имеет формат XML. Файл mapping можно использовать вместо аннотаций JPA. Особенно он становится необходимым при использовании сторонних библиотек.

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 :

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

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

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

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

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

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

Обратите внимание, что при формировании Query был добавлен класс Employee.class, в результате чего метод list() объекта Query вернул коллекцию сотрудников List<Employee>.

В следующем коде при формировании Query нет привязки к конкретному классу. В результате метод list() возвращает коллекцию объектов List<Object[]>.

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 перечисления описаны ниже :

  • None : без каскадирования, т.е. никакая операция для родителя не будет иметь эффекта для ребенка;
  • ALL : все операции родителя будут отражены на ребенке (save, delete, update, evict, lock, replicate, merge, persist);
  • SAVE_UPDATE : операции save и update, доступно только для hibernate;
  • DELETE : в Hibernate передается действие native DELETE;
  • DETATCH, MERGE, PERSIST, REFRESH, REMOVE – для простых операций;
  • LOCK : передает в Hibernate native LOCK действие;
  • REPLICATE : передает в Hibernate native REPLICATE действие.

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

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

Схематично это можно изобразить следующим образом:

hibernate

Какие же преимущества даёт нам использование Hibernate?

  • Обеспечивает простой API для записи и получения Java-объектов в/из БД.
  • Минимизирует доступ к БД, используя стратегии fetching.
  • Не требует сервера приложения.
  • Позволяет нам не работать с типами данных языка SQL, а иметь дело с привычыми нам типами данных Java.
  • Заботится о создании связей между Java-классами и таблицами БД с помощью XML-файлов не внося изменения в программный код.
  • Если нам неоходимо изменить БД, то достаточно лишь внести изменения в XML-файлы.

Hibernate поддердивает все основные СУБД: MySQL, Oracle, PostgreSQL, Microsoft SQL Server Database, HSQL, DB2.
Hibernate также может работать в связке с такими технологиями, как Maven и J2EE.

Архитектура

Приложение, которе использует Hibernate (в крайне поверхностном представлении) имеет такую архитектуру:

arch

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

hibArchDetailed

Hibernate поддерживает такие API, как JDBC, JNDI, JTA.
JDBC обеспечивает простейший уровень абстракции функциональности для реляционных БД. JTA и JNDI, в свою очередь, позволяют Hibernate использовать серверы приложений J2EE.

Давайье рассмотрим отдельно каждый из элементов Hibernate, которые указаны в схеме:

Transaction

Этот объект представляет собой рабочую единицу работы с БД. В Hibernate транзакции обрабатываются менеджером транзакций.

SessionFactory

Самый важный и самый тяжёлый объект (обычно создаётся в единственном эземпляре, при запуске прилодения). Нам необходима как минимум одна SessionFactory для каждой БД, каждый из которых конфигурируется отдельным конфигурационным файлом.

Session

Сессия исползуется для получения физического соединения с БД. Обычно, сессия создаётся при необходимости, а после этого закрывается. Это связано с тем, что эти объекты крайне легковесны. Чтобы понять, что это такое, модно сказать, что создание, чтение, изменение и удаление объектов происходит через объект Session.

Query

Этот объект использует HQL или SQL для чтения/записи данных из/в БД. Экземпляр запроса используется для связыания парметров запроса, ограничения количества результатов, которые будут возвращены и для выполнения запроса.

Configuration

Этот объект используется для создания объекта SessionFactory и конфигурирует сам Hibernate с помощью конифигурационного XML-файла, который объясняет, как обрабатывать объект Session.

Criteria

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

Читайте также: