Какой тип оболочки предоставляется фреймворком hibernate
Вопросы и ответы на собеседование по теме Hibernate Framework. Часть 1.
к списку вопросов раздела JEE
Объект запроса
Объекты запросов используют строку SQL или язык запросов Hibernate (HQL) для извлечения данных из базы данных и создания объектов. Экземпляр Query используется для привязки параметров запроса, ограничения количества результатов, возвращаемых запросом, и, наконец, для выполнения запроса.
1.4.8 Написать тестовый код
1.6.2 SessionFactory: фабрика сессий
SessionFactory поддерживает пул соединений Hibernate и вторичный кеш Hibernate (не говоря уже о). Это потокобезопасный объект. Создайте один объект на проект.
Настроить пул соединений: (понимаю)
Введите пакет jar C3P0, а затем вставьте следующее содержимое в файл конфигурации ядра hibernate.cfg.xml.
Инструменты для извлечения
Тестовый класс инструмента Hibernate
Содержание
7. Что такое JPA?
JPA — это аббревиатура для API персистентности Java. Этот API из Java предоставляет определенные предопределенные аннотации в Java, что делает базу данных ORM проще. Все, что вам нужно сделать, это разместить эти аннотации над именем класса и переменными, чтобы сопоставить их с таблицей базы данных.
1.5.3 Конфигурация ядра Hibernate
Основной метод конфигурации Hibernate
- Один путь: путь файла свойств
- hibernate.properties
- hibernate.connection.driver_class=com.mysql.jdbc.Driver
- …
- hibernate.show_sql=true
- Два способа: файл XML
- hibernate.cfg.xml
Основная конфигурация
- Требуемая конфигурация
- Основные параметры для подключения к базе данных
- класс драйвера
- URL-путь
- имя пользователя
- пароль
- Показать SQL: hibernate.show_sql
- Формат SQL: hibernate.format_sql
- Автоматическое создание таблицы: hibernate.hbm2ddl.auto
- none: автоматическое создание таблицы в Hibernate не применимо
- create: если в базе данных уже есть таблица, удалите исходную таблицу и заново создайте, если таблицы нет, создайте новую таблицу. (Тест)
- create-drop: если в базе данных уже есть таблица, удалите исходную таблицу, выполните операцию и удалите таблицу. Если таблицы нет, создайте новую и удалите таблицу после использования. (Тест)
- обновление: если в базе данных есть таблица, используйте исходную таблицу, если таблицы нет, создайте новую таблицу (измените новую структуру таблицы)
- validate: если таблицы нет, таблица не будет создана. Будут использованы только оригинальные таблицы в базе данных. (Проверьте отображение и структуру таблицы)
- Введите местоположение файла сопоставления
4. Что такое HQL-запросы?
HQL — это сокращение от языка запросов Hibernate. HQL — это более простой способ писать запросы независимо от базы данных. HQL-запросы понятны инфраструктуре Hibernate. Они преобразуются в обычные запросы SQL в зависимости от используемого диалекта базы данных. Обычно без фреймворка Hibernate процесс изменения базовой базы данных включает в себя изменение всех запросов. В Hibernate Framework, если код использует HQL-запросы, процесс изменения базовой базы данных довольно прост. Все, что требуется сделать, это изменить диалект и учетные данные БД, а остальная часть позаботится об этом.
1.6.1 Конфигурация: объект конфигурации Hibernate
- Функция:
- Загрузите файл конфигурации ядра
- hibernate.properties
- hibernate.cfg.xml
- Загрузите файл сопоставления
10. Какие важные интерфейсы предоставляет Hibernate?
Спящий режим, используя следующие важные интерфейсы.
Сессия (org.hibernate.Session)
Session — это однопоточный и недолговечный объект, созданный для цикла связи между приложением Java и хранилищем базы данных. Это оболочка над JDBC java.sql.Connection классом и работает как фабрика для org.hibernate.Transaction . Экземпляр класса, реализующего этот интерфейс, должен создаваться только тогда, когда это необходимо, и должен быть уничтожен, как только мы закончим с его использованием. Этот объект обеспечивает интерфейс между ядром Java и средой гибернации для операций CRUD.
SessionFactory (org.hibernate.SessionFactory)
Как видно из названия, этот интерфейс управляет функциями подписи для создания и уничтожения объектов Session. Класс, реализующий SessionFactory, имеет неизменный потокобезопасный кеш, который поддерживается для управления сеансами. Кроме того, он поддерживает кэш предварительно скомпилированных отображений базы данных для обеспечения более быстрой работы базы данных.Сделка (org.hibernate.Transaction)
Транзакция, как следует из названия, представляет собой интерфейс, содержащий определения функций для управления взаимодействием с базой данных. Транзакция — это недолговечный поток, который заботится о получении данных из приложения Java и их доставке в базу данных в форме запроса. Транзакция похожа на сеанс, который уничтожается после каждой транзакции базы данных.Критерий Объект
Объекты критериев используются для создания и выполнения объектно-ориентированных запросов критериев для извлечения объектов.
Ответы
31. Как логировать созданные Hibernate SQL запросы в лог-файлы?
Для логирования запросов SQL добавьте в файл конфигурации Hibernate строчку:
Отметьте, что это необходимо использовать на уровне Development или Testing и должно быть отключено в продакшн.
32. Что вы знаете о Hibernate прокси и как это помогает в ленивой загрузке (lazy load)?
Hibernate использует прокси объект для поддержки отложенной загрузки. Обычно при загрузке данных из таблицы Hibernate не загружает все отображенные (замаппинные) объекты. Как только вы ссылаетесь на дочерний объект или ищите объект с помощью геттера, если связанная сущность не находится в кэше сессии, то прокси код перейдет к базе данных для загрузки связанной сущности. Для этого используется javassist, чтобы эффективно и динамически создавать реализации подклассов ваших entity объектов.
33. Как реализованы отношения в Hibernate?
Реализовать отношение one-to-one , one-to-many , many-to-many можно с помощью JPA аннотаций или конфигурирования xml файла. За примерами посетите раздел Hibernate.
34. Как управлять транзакциями с помощью Hibernate?
Hibernate вообще не допускает большинство операций без использования транзакций. Поэтому после получения экземпляра session от SessionFactory необходимо выполнить beginTransaction() для начала транзакции. Метод вернет ссылку, которую мы можем использовать для подтверждения или отката транзакции.
В целом, управление транзакциями в фреймворке выполнено гораздо лучше, чем в JDBC, т.к. мы не должны полагаться на возникновение исключения для отката транзакции. Любое исключение автоматически вызовет rollback.
35. Что такое каскадные связи (обновления) и какие каскадные типы есть в Hibernate?
Если у нас имеются зависимости между сущностями (entities), то нам необходимо определить как различные операции будут влиять на другую сущность. Это реализуется с помощью каскадных связей (или обновлений). Вот пример кода с использованием аннотации @Cascade :
Обратите внимание, что есть некоторые различия между enum CascadeType в Hibernate и в JPA. Поэтому обращайте внимание какой пакет вы импортируете при использовании аннотации и константы типа. Наиболее часто используемые CascadeType перечисления описаны ниже.
- None: без Cascading. Формально это не тип, но если мы не указали каскадной связи, то никакая операция для родителя не будет иметь эффекта для ребенка.
- ALL: Cascades save, delete, update, evict, lock, replicate, merge, persist. В общем — всё.
- SAVE_UPDATE: Cascades save и update. Доступно только для hibernate.
- DELETE: передает в Hibernate native DELETE действие. Только для hibernate.
- DETATCH, MERGE, PERSIST, REFRESH и REMOVE – для простых операций.
- LOCK: передает в Hibernate native LOCK действие.
- REPLICATE: передает в Hibernate native REPLICATE действие.
36. Как добавить логирование log4j в Hibernate приложение?
- Добавить зависимость log4j в проект.
- Создать log4j.xml или log4j.properties файл и добавить его в classpath.
- Для веб приложений используйте ServletContextListener, а для автономных приложений DOMConfigurator или PropertyConfigurator для настройки логирования.
- Создайте экземпляр org.apache.log4j.Logger и используйте его согласно задачи.
Может быть полезно посетить раздел Log4j2.
37. Как использовать JNDI DataSource сервера приложений с Hibernate Framework?
В веб приложении лучше всего использовать контейнер сервлетов для управления пулом соединений. Поэтому лучше определить JNDI ресурс для DataSource и использовать его в веб приложении. Для этого в Hibernate нужно удалить все специфичные для базы данных свойства и использовать указания свойства JNDI DataSource:
38. Как интегрировать Hibernate и Spring?
Лучше всего прочитать о настройках на сайтах фреймворков для текущей версии. Оба фреймворка поддерживают интеграцию из коробки и в общем настройка их взаимодействия не составляет труда. Общие шаги выглядят следующим образом.
- Добавить зависимости для hibernate-entitymanager, hibernate-core и spring-orm.
- Создать классы модели и передать реализации DAO операции над базой данных. Важно, что DAO классы используют SessionFactory, который внедряется в конфигурации бинов Spring.
- Настроить конфигурационный файл Spring (смотрите в офф. документации или из примера на этом сайте).
- Дополнительно появляется возможность использовать аннотацию @Transactional и перестать беспокоиться об управлении транзакцией Hibernate.
39. Что вы знаете о классе HibernateTemplate?
Spring Framework предоставляет различные подходы для интеграции с Hibernate. Тем не менее, мы наиболее часто будем использовать подход, использующий HibernateTemplate. Есть две основные причины:
- Класс скрывает детали управления сессиями и транзакциями.
- Предоставляет подход основанный на шаблонах
HibernateTemplate класс скрывает трудности управления сессиями и транзакциями при использовании Hibernate для доступа к данным. Нужно только инициализировать HibernateTemplate путем передачи экземпляра SessionFactory. Spring Framework берет на себя беспокойство за детали связанные с сессиями и транзакциями. Это помогает устранить инфраструктурный код, который может вносить суматоху при увеличении сложности.
HibernateTemplate, так же как и JdbcTemplate, предоставляет шаблонный подход для доступа к данным. Когда вы используете HibernateTemplate, вы будете работать с callbacks. Обратные вызовы — это единственный механизм в шаблонном подходе, который уведомляет шаблон запускать нужную задачу. Преимущество наличия обратного вызова в том, что там только одна точка входа в слой доступа к данным. И эта точка входа определяется шаблоном, в этом случае HibernateTemplate.В комментариях дополнили, что использование HibernateTemplate не явлется рекомендуемым. Вместо использования HibernateTemplate из пакета org.springframework.orm рекомендуется использовать декларативный подход (@Transactional). Таким образом фреймворк сам позаботится об операциях open, commit, close, flush.
40. Как интегрировать Hibernate с Servlet или Struts2 веб приложением?
Для интеграции необходимо использовать ServletContextListener. Более подробный пример смотрите по ссылке
41. Какие паттерны применяются в Hibernate?
- Domain Model Pattern – объектная модель предметной области, включающая в себя как поведение так и данные.
- Data Mapper – слой мапперов (Mappers), который передает данные между объектами и базой данных, сохраняя их независимыми друг от друга и себя.
- Proxy Pattern — применяется для ленивой загрузки.
- Factory pattern — используется в SessionFactory
42. Расскажите о Hibernate Validator Framework.
Проверка данных является неотъемлемой частью любого приложения. Hibernate Validator обеспечивает эталонную реализацию двух спецификаций JSR-303 и JSR-349 применяемых в Java. Для настройки валидации в Hibernate необходимо сделать следующие шаги.
Framework: относится к полуфабрикату программного обеспечения, который выполнил некоторые функции.
1.4.1.6 Создание отображения
Сопоставление должно быть сделано через файл конфигурации XML, который может быть назван произвольно. Попробуйте унифицировать соглашение об именах (class name.hbm.xml)
Конфигурация файла customer.hbm.xml (обычно помещается в тот же пакет, что и класс сущности):SessionFactory Object
Объект конфигурации используется для создания объекта SessionFactory, который, в свою очередь, настраивает Hibernate для приложения, используя предоставленный файл конфигурации, и позволяет создавать экземпляр объекта Session. SessionFactory является потокобезопасным объектом и используется всеми потоками приложения.
SessionFactory – это тяжеловесный объект; обычно создается во время запуска приложения и сохраняется для последующего использования. Вам потребуется один объект SessionFactory для каждой базы данных с использованием отдельного файла конфигурации. Итак, если вы используете несколько баз данных, вам придется создать несколько объектов SessionFactory.
1. Что такое ORM?
Java — это объектно-ориентированный язык программирования. В Java мы отображаем почти каждый объект реального мира в объект. ORM является аббревиатурой от Object Relational Model. ORM — это основная концепция Hibernate. ORM — это процесс отображения таблиц базы данных в классы Java или объекты Java. Каждый столбец в базе данных сопоставлен с другой переменной в Java. Таким образом, ORM помогает нам упростить процесс взаимодействия с базой данных в Java.
Объект конфигурации
Объект конфигурации – это первый объект Hibernate, который вы создаете в любом приложении Hibernate. Обычно создается только один раз во время инициализации приложения. Он представляет файл конфигурации или свойств, требуемый Hibernate.
Объект конфигурации содержит два ключевых компонента:
Соединение с базой данных – это обрабатывается через один или несколько файлов конфигурации, поддерживаемых Hibernate. Это файлы hibernate.properties и hibernate.cfg.xml .
Настройка отображения классов – этот компонент создает связь между классами Java и таблицами базы данных.
Соединение с базой данных – это обрабатывается через один или несколько файлов конфигурации, поддерживаемых Hibernate. Это файлы hibernate.properties и hibernate.cfg.xml .
Настройка отображения классов – этот компонент создает связь между классами Java и таблицами базы данных.
1.5.2 Конфигурация отображения Hibernate
Сопоставленная конфигурация
[конфигурация тега класса]- Метка используется для установления отношения отображения между классом и таблицей
- Атрибут:
- имя: полный путь класса
- table: имя таблицы (имя класса соответствует имени таблицы, таблица может быть опущена)
- каталог: имя базы данных
[Конфигурация тега id]
- Метка используется для установления соответствия между атрибутами в классе и первичным ключом в таблице.
- Атрибут:
- name: имя атрибута в классе
- column: имя поля в таблице (если имя атрибута в классе совпадает с именем поля в таблице, столбец можно опустить)
- длина: длина
- тип: тип
[Конфигурация тега свойства]
- Метка используется для установления соответствия между общими атрибутами в классе и полями таблицы.
- Атрибут:
- name; имя атрибута в классе
- столбец: имя поля в таблице
- длина: длина
- тип: тип
- not-null: установить ненулевое значение
- уникальный: набор уникальный
1.4.1 Загрузить среду разработки Hibernate
1.3 Обзор гибернации
1.4.7 Создание файла конфигурации ядра Hibernate
Имя файла конфигурации ядра Hibernate: hibernate.cfg.xml
Конфигурация файла hibernate.cfg.xml (обычно размещается непосредственно под src)1.5 Общая конфигурация Hibernate
1.3.2 Что такое ORM
ORM: реляционное сопоставление объектов. Относится к установлению отношения отображения между объектом в Java и таблицей в реляционной базе данных, чтобы операция объекта могла управлять таблицей в базе данных.
Вопросы
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.2. Что такое фреймворк Hibernate?
Hibernate Framework — это набор классов Java, созданный для упрощения процесса подключения и взаимодействия с базой данных. Hibernate Framework обеспечивает промежуточный уровень кода между базой данных и кодом Java. Этот уровень облегчает настройку базы данных, пула соединений, выполнения запросов, а также кэширования. Hibernate позволяет разработчику оставаться значительно независимым от изменений базы данных.
1.4.3 Создать проект и внедрить пакет jar
- Пакет драйверов базы данных
- Необходимый пакет банок, разработанный Hibernate
- Hibernate представляет пакет логов
Объект сделки
Транзакция представляет собой единицу работы с базой данных, и большинство СУБД поддерживает функциональность транзакций. Транзакции в Hibernate обрабатываются соответствующим менеджером транзакций и транзакциями (из JDBC или JTA).
Это необязательный объект, и приложения Hibernate могут не использовать этот интерфейс, а вместо этого управлять транзакциями в собственном коде приложения.
Основы гибернации
1.3.1 Что такое Hibernate
Hibernate: Hibernate - это поддержка длинный слой \ color поддержка длинный слой из O R M \color O R M Framework.5. Каковы возможные способы настройки Hibernate Framework?
Hibernate Framework может быть настроен с использованием XML, а также аннотаций классов Java. Однако функция аннотации на основе классов Java появилась только в Hibernate 4.0. Следовательно, любая более низкая версия поддерживает только конфигурацию на основе XML.
1.4 Начало работы с Hibernate
1.4.4 Создать таблицу
1.6.3 Сеанс: Аналогично объекту Connection является объект подключения
Сеанс представляет объект связи между Hibernate и базой данных. Не потокобезопасен. Взаимодействовать с базой данных.
Это краткое изложение наиболее важных вопросов, касающихся Hibernate Framework, на которые вас могут попросить ответить в интервью! Вам не нужно беспокоиться о вашем следующем тесте собеседования, потому что Java Code Geeks здесь для вас!
Большинство вопросов, которые вам могут быть заданы, собраны в списке ниже. Наши вопросы об интервью Hibernate проведут вас через полную структуру Hibernate и обеспечат полное понимание структуры, используя вопросы и ответы. Вопросы разбиты на категории для предоставления информации по каждому модулю по мере необходимости. С помощью этих вопросов об интервью Hibernate мы гарантируем, что вам больше не нужно беспокоиться об интервью, связанных с платформой Hibernate.
Вопрос и ответы начинаются с введения основы и ее концепций. Они распространяются на конфигурацию, использование и концепции. Чтобы немного углубиться, мы рассмотрим вопросы, относящиеся к уровням кэширования и конфигурациям, связанным с кэшированием. Вопросы заканчиваются объяснением различных особенностей гибернации, которые облегчают ваше программирование.
Давайте начнем с вводной части.
Настройка Hibernate Framework
9. Каковы преимущества использования Hibernate над JDBC?
JDBC — соединение с базой данных Java — это стандартный API соединения с базой данных, для которого требуется код драйвера базы данных и отдельный код соединения с базой данных для каждой базы данных. JDBC понимает только стандартные запросы SQL. С Hibernate Framework драйверы базы данных поставляются предварительно загруженными. Нет необходимости загружать новый драйвер каждый раз, когда вы меняете базу данных. Более того, Hibernate поддерживает как SQL, так и HQL. Если разработчик использует HQL, hibernate позаботится о подготовке запроса SQL для базовой базы данных с использованием настроенного диалекта. Кроме того, 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. И вот почему:
- Hibernate устраняет множество спагетти кода (повторяющегося), который постоянно преследует разработчика при работе с JDBC. Скрывает от разработчика множество кода, необходимого для управления ресурсами и позволяет сосредоточиться на бизнес логике.
- Hibernate поддерживает XML так же как и JPA аннотации, что позволяет сделать реализацию кода независимой.
- Hibernate предоставляет собственный мощный язык запросов (HQL), который похож на SQL. Стоит отметить, что HQL полностью объектно-ориентирован и понимает такие принципы, как наследование, полиморфизм и ассоциации (связи).
- Hibernate — широко распространенный open source проект. Благодаря этому доступны тысячи открытых статей, примеров, а так же документации по использованию фреймворка.
- Hibernate легко интегрируется с другими Java EE фреймворками, например, Spring Framework поддерживает встроенную интеграцию с Hibernate.
- Hibernate поддерживает ленивую инициализацию используя proxy объекты и выполняет запросы к базе данных только по необходимости.
- Hibernate поддерживает разные уровни cache, а следовательно может повысить производительность.
- Важно, что Hibernate может использовать чистый SQL, а значит поддерживает возможность оптимизации запросов и работы с любым сторонним вендором БД и его фичами.
3. Какие преимущества Hibernate над JDBC?
Hibernate имеет ряд преимуществ перед JDBC API:
- Hibernate удаляет множество повторяющегося кода из JDBC API, а следовательно его легче читать, писать и поддерживать.
- Hibernate поддерживает наследование, ассоциации и коллекции, что не доступно в JDBC API.
- Hibernate неявно использует управление транзакциями. Большинство запросов нельзя выполнить вне транзакции. При использовании JDBC API для управления транзакциями нужно явно использовать commit и rollback .
- JDBC API throws SQLException , которое относится к проверяемым исключениям, а значит необходимо постоянно писать множество блоков try-catch . В большинстве случаев это не нужно для каждого вызова JDBC и используется для управления транзакциями. Hibernate оборачивает исключения JDBC через непроверяемые JDBCException или HibernateException , а значит нет необходимости проверять их в коде каждый раз. Встроенная поддержка управления транзакциями в Hibernate убирает блоки try-catch .
- Hibernate Query Language (HQL) более объектно ориентированный и близкий к Java язык запросов, чем SQL в JDBC.
- Hibernate поддерживает кэширование, а запросы JDBC — нет, что может понизить производительность.
- Конфигурация Hibernate позволяет использовать JDBC вроде соединения по типу JNDI DataSource для пула соединений. Это важная фича для энтерпрайз приложений, которая полностью отсутствует в JDBC API.
- Hibernate поддерживает аннотации JPA, а значит код является переносимым на другие ORM фреймворки, реализующие стандарт, в то время как код JDBC сильно привязан к приложению.
4. Назовите некоторые важные интерфейсы Hibernate.
- SessionFactory (org.hibernate.SessionFactory) — неизменяемый потокобезопасный объект с компилированным маппингом для одной базы данных. Необходимо инициализировать SessionFactory всего один раз. Экземпляр SessionFactory используется для получения объектов Session , которые используются для операций с базами данных.
- Session (org.hibernate.Session) — однопоточный короткоживущий объект, который предоставляет связь между объектами приложения и базой данных. Он оборачивает JDBC java.sql.Connection и работает как фабрика для org.hibernate.Transaction . Разработчик должен открывать сессию по необходимости и закрывать ее сразу после использования. Экземпляр Session является интерфейсом между кодом в java приложении и hibernate framework и предоставляет методы для операций CRUD.
- Transaction (org.hibernate.Transaction) — однопоточный короткоживущий объект, используемый для атомарных операций. Это абстракция приложения от основных JDBC или JTA транзакций. org.hibernate.Session может занимать несколько org.hibernate.Transaction в определенных случаях.
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:
- javax.persistence.Entity: используется для указания класса как entity bean.
- javax.persistence.Table: используется для определения имени таблицы из БД, которая будет отображаться на entity bean.
- javax.persistence.Access: определяет тип доступа, поле или свойство. Поле — является значением по умолчанию и если нужно, чтобы hibernate использовал методы getter/setter, то их необходимо задать для нужного свойства.
- javax.persistence.Id: определяет primary key в entity bean.
- javax.persistence.EmbeddedId: используется для определения составного ключа в бине.
- javax.persistence.Column: определяет имя колонки из таблицы в базе данных.
- javax.persistence.GeneratedValue: задает стратегию создания основных ключей. Используется в сочетании с javax.persistence.GenerationType enum.
- javax.persistence.OneToOne: задает связь один-к-одному между двумя сущностными бинами. Соответственно есть другие аннотации OneToMany , ManyToOne и ManyToMany .
- org.hibernate.annotations.Cascade: определяет каскадную связь между двумя entity бинами. Используется в связке с org.hibernate.annotations.CascadeType .
- javax.persistence.PrimaryKeyJoinColumn: определяет внешний ключ для свойства. Используется вместе с org.hibernate.annotations.GenericGenerator и org.hibernate.annotations.Parameter .
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 .
Вопросы и ответы на собеседование по теме Hibernate Framework. Часть 2.
к списку вопросов раздела JEE
1.4.5 Создание класса сущностей
1.2 Трехуровневая структура Java EE
1.2.1 Классическая трехуровневая структура Java EE
1.6 Основные API Hibernate
1.5.1 Настройка подсказки XML
Объект сеанса
Сессия используется для получения физического соединения с базой данных. Объект Session является легким и предназначен для реализации каждый раз, когда необходимо взаимодействие с базой данных. Постоянные объекты сохраняются и извлекаются через объект Session.
Объекты сеанса не должны оставаться открытыми в течение длительного времени, потому что они обычно не являются потокобезопасными, и их следует создавать и уничтожать по мере необходимости.
6. Что такое пул соединений?
В корпоративном приложении приложение будет поражено многочисленными пользователями. Если сервер приложений устанавливает новое соединение для каждого запроса, это будет нагрузкой для сервера базы данных. С другой стороны, если есть только одно соединение с базой данных, это приведет к огромным накладным расходам на запросы на запрос. Следовательно, предпочтительно иметь ограниченное количество соединений с базой данных, предварительно настроенных в Hibernate. Каркас Hibernate гарантирует, что новые соединения будут установлены, пока не будет достигнут определенный максимальный предел. После ограничения, Hibernate повторно использует объект подключения к базе данных. Таким образом, пул соединений Hibernate представляет собой набор объектов соединений базы данных, созданных для управления параллельным взаимодействием с базой данных.
8. Как JPA помогает в Hibernate Framework?
До запуска и принятия JPA в качестве стандартов ORM Hibernate использовал сопоставление XML для строгой привязки объектов Value гибернации к объектам базы данных. Это отображение основано на XML и, следовательно, подвержено большим ошибкам и требует больше усилий при настройке отображения. Благодаря JPA Hibernate упростил процесс отображения, включив сканирование аннотаций JPA. Эти аннотации устраняют необходимость использования XML для отображения.
11. Какие конфигурации используются в Hibernate Framework?
Фреймворк Hibernate — это огромный фреймворк, предназначенный для поддержки практически всех операций с базами данных. Для настройки такой структуры необходимо настроить несколько объектов. Они включают:
- Учетные данные базы данных
- База данных диалект
- URL базы данных
- Уровни кеширования
- ORM картирование
- Конфигурация пула соединений
- Режим создания таблицы — создание / обновление
Hibernate поставляется со значениями по умолчанию практически для всех конфигураций, не связанных с базой данных, таких как размер пула подключений, уровни кэширования, режим создания таблиц и другие. Таким образом, несмотря на множество настраиваемых аспектов, он позволяет начать с минимальной конфигурации.
3. Что такое диалект?
Диалект — это набор файлов кода или иногда один файл, который определяет процесс подключения базы данных к классу Java. Диалект в Hibernate играет роль понимания связи, происходящей с базовой базой данных. Всякий раз, когда изменяется базовая база данных, все, что вам нужно изменить в конфигурации Hibernate, — это диалект и учетные данные базы данных. Это верно, пока код использует HQL-запросы.
1.4.2 Разархивировать Hibernate
- документация: документация по разработке Hibernate
- lib: комплект разработки Hibernate
- required: обязательный пакет зависимостей, разработанный Hibernate
- опционально: опциональный пакет jar, разработанный Hibernate
Вопросы
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.3.3 Зачем изучать Hibernate
12. Что такое файл конфигурации Hibernate?
Файл конфигурации Hibernate включает в себя специфические конфигурации базы данных, которые требуются для начала подключения к базе данных с использованием Hibernate Framework. Файл конфигурации обычно представляет собой XML-документ с именем hibernate.cfg.xml. Если вы предпочитаете использовать конфигурацию на основе Java, вам нужно создать файл свойств, подобный показанному ниже.
Hibernate имеет многоуровневую архитектуру, которая помогает пользователю работать без знания базовых API. Hibernate использует базу данных и данные конфигурации для предоставления приложениям постоянных сервисов (и постоянных объектов).
Ниже приводится очень высокий уровень представления архитектуры приложений Hibernate.
Ниже приведено подробное представление архитектуры приложений Hibernate с ее важными основными классами.
Hibernate использует различные существующие API Java, такие как JDBC, API транзакций Java (JTA) и интерфейс именования и каталогов Java (JNDI). JDBC обеспечивает элементарный уровень абстракции функциональности, общей для реляционных баз данных, что позволяет Hibernate поддерживать практически любую базу данных с драйвером JDBC. JNDI и JTA позволяют интегрировать Hibernate с серверами приложений J2EE.
В следующем разделе дается краткое описание каждого из объектов класса, участвующих в Hibernate Application Architecture.
Вопросы
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.Читайте также:
- Основные параметры для подключения к базе данных