Файл: Жизненный цикл проекта Maven.docx

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 12.04.2024

Просмотров: 11

Скачиваний: 0

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

ORM — это по сути концепция о том, что Java объект можно представить как данные в БД (и наоборот). Она нашла воплощение в виде спецификации JPA — Java Persistence API.



  • Что такое Hibernate?

Hibernate — библиотека для языка программирования Java, предназначенная для решения задач объектно-реляционного отображения (ORM), самая популярная реализация спецификации JPA. Распространяется свободно на условиях GNU Lesser General Public License.
Библиотека не только решает задачу связи классов Java с таблицами базы данных (и типов данных Java с типами данных SQL), но и также предоставляет средства для автоматической генерации и обновления набора таблиц, построения запросов и обработки полученных данных и может значительно уменьшить время разработки, которое обычно тратится на ручное написание SQL- и JDBC-кода. Hibernate автоматизирует генерацию SQL-запросов и освобождает разработчика от ручной обработки результирующего набора данных и преобразования объектов, максимально облегчая перенос (портирование) приложения на любые базы данных SQL.



  • Какие требования JPA к Entity классам вы можете перечислить (не менее шести требований)?

1) Entity класс должен быть отмечен аннотацией Entity или описан в XML файле конфигурации JPA,

2) Entity класс должен содержать public или protected конструктор без аргументов (он также может иметь конструкторы с аргументами),

3) Entity класс должен быть классом верхнего уровня (top-level class),

4) Entity класс не может быть enum или интерфейсом,

5) Entity класс не может быть финальным классом (final class),

6) Entity класс не может содержать финальные поля или методы, если они участвуют в маппинге (persistent final methods or persistent final instance variables),

7) Если объект Entity класса будет передаваться по значению как отдельный объект (detached object), например через удаленный интерфейс (through a remote interface), он так же должен реализовывать Serializable интерфейс,

8) Поля Entity класс должны быть напрямую доступны только методам самого Entity класса и не должны быть напрямую доступны другим классам, использующим этот Entity. Такие классы должны обращаться только к методам (getter/setter методам или другим методам бизнес-логики в Entity классе),

9) Enity класс должен содержать первичный ключ, то есть атрибут или группу атрибутов которые уникально определяют запись этого Enity класса в базе данных,


  • В чем разница между JPA и Hibernate? Как связаны все эти понятия?


JPA описывает API, а Hibernate реализует.
Hibernate одна из самых популярных открытых реализаций последней версии спецификации (JPA 2.1). Даже скорее самая популярная, почти стандарт де-факто. То есть JPA только описывает правила и API, а Hibernate реализует эти описания, впрочем у Hibernate (как и у многих других реализаций JPA) есть дополнительные возможности, не описанные в JPA (и не переносимые на другие реализации JPA).



  • Какие классы/интерфейсы относятся к JPA/Hibernate?

EntityManagerFactory — это встроенный интерфейс JPA. Он может быть создан с помощью класса Persistence, указав название блока сохранения из файла .xml сохранения. Вышеупомянутый код создает emf EntityManagerFactory, ссылаясь на единицу сохранения PERSISTENCE. EntityManagerFactory специфичен для базы данных. Итак, если вы хотите подключиться к другой базе данных, необходимо создать другой экземпляр EntityManagerFactory. EntityManagerFactory может быть использован для создания экземпляров EntityManager.

EntityManager также является встроенным интерфейсом JPA. Он может быть создан с помощью экземпляра EntityManagerFactory. Код выше создает EntityManager экземпляр EM через EntityManagerFactory экземпляр emf. EntityManager представляет собой соединение базы данных. Вы можете использовать его для выполнения операций с базой данных, таких как вставка/обновление/удаление или запрос таблицы. Вышеупомянутый код вызывает метод PERSISTENCE для сохранения записи Fruit в таблице Fruit.

EntityTransaction также является встроенным интерфейсом JPA. Он может быть создан с помощью EntityManager. Код выше создает экземпляр EntityTransaction и через entityManager экземпляр EM. Сделка EntityTransaction инкапсулирует транзакцию базы данных. Вызов к методу начала транзакции и вызов для совершения сохраняет изменения в базе данных.
Query Запрос также является встроенным интерфейсом JPA. Он может быть создан с помощью EntityManager. Код выше создает Typed'y (который является под-интерфейс запроса) пример запроса через EntityManager экземпляр EM. Запрос можно использовать для выполнения запроса базы данных. В вышеуказаном коде используется запрос для получения всех записей Fruit. Интерфейс запроса имеет методы, которые для получения результатов выполнения запроса.

  • Основные аннотации Hibernate, рассказать.

@Entity Эта аннотация указывает Hibernate, что данный класс является сущностью (entity bean). Такой класс должен иметь конструктор по-умолчанию (пустой конструктор).

Сущность является простым классом POJO (POJO (англ. Plain Old Java Object) — «старый добрый Java-объект», простой Java-объект, не унаследованный от какого-то специфического объекта и не реализующий никаких служебных интерфейсов сверх тех, которые нужны для бизнес-модели) , который соответствует таблице базы данных. Он должен иметь поля, соответствующие столбцам таблицы баз данных. определённые требования:


  • Наличие публично доступного конструктора без аргументов


  • Класс, его методы и сохраняемые поля не должны быть final


  • Если объект Entity класса будет передаваться по значению как отдельный объект (detached object), например через удаленный интерфейс (through a remote interface), он так же должен реализовывать Serializable интерфейс.


  • Сохраняемые поля должны быть доступны только с использованием методов класса.


@Table
С помощью этой аннотации мы говорим Hibernate, с какой именно таблицей необходимо связать (map) данный класс. Аннотация @Table имеет различные аттрибуты, с помощью которых мы можем указать имя таблицы, каталог, БД и уникальность столбцов в таблец БД.
@Id
С помощью аннотации @Id мы указываем первичный ключ (Primary Key) данного класса.
@GeneratedValue
Эта аннотация используется вместе с аннотацией @Id и определяет такие паметры, как strategy и generator
@Column
Аннотация @Column определяет к какому столбцу в таблице БД относится конкретное поле класса (аттрибут класса).
@ManyToMany, @ManyToOne, OneToMany
Диаграммы отношений сущностей, которая показывает связь "многие ко многим" между двумя сущностями

  • Чем HQL отличается от SQL?

HQL(Hibernate Query Language)
Отличие между HQL и SQL состоит в том, что SQL работает таблицами в базе данных (далее – БД) и их столбацами, а HQL – с сохраняемыми объектами (Persistent Objects) и их полями (аттрибутами класса).
HQL это аналог SQL в мире Hibernate, ориентированный на запросы не к таблицам, а к классам.

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

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



  • Что такое Query? Как передать в объект Query параметры?

Объектно-ориентированное представление запроса Hibernate. Запроса экземпляра получается вызовом Session.createQuery () . Этот интерфейс предоставляет некоторые дополнительные функции, помимо тех, которые предоставляются Session.iterate () и Session.find () :


конкретная страница набора результатов может быть выбрана путем вызова setMaxResults (), setFirstResult ()


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


результаты могут быть возвращены как экземпляр ScrollableResults.


Session.createQuery(java.lang.String).ScrollableResults Далее еще примеры методов


int


executeUpdate()

Execute the update or delete statement.


String[]


getNamedParameters()

Return the names of all named parameters of the query.


String


getQueryString()

Get the query string.


String[]


getReturnAliases()

Return the HQL select clause aliases (if any)


Type[]


getReturnTypes()

Return the Hibernate types of the query result set.


Iterator


iterate()

Return the query results as an Iterator.


List


list()

Return the query results as a List.


ScrollableResults


scroll()

Return the query results as ScrollableResults.



  • Какие можно устанавливать параметры в hbm2ddl, рассказать про каждый из них.

hibernate.hbm2ddl.auto Автоматически проверяет или экспортирует DDL схемы в базу данных при создании

Итак, список возможных вариантов:


validate : проверяет схему, не вносит изменений в базу данных;


update : обновляет схему, если схема отсутствует в БД, тогда схема создается;


create : создает схему, уничтожая предыдущие данные;


create-drop : удалить схему, когда SessionFactory закрывается явно, обычно, когда приложение остановлено. схема не удаляется при закрытии сеанса. Он сбрасывается только при закрытии SessionFactory.
В случае, если я даю какое-либо значение этому свойству (скажем, abc вместо четырех значений, описанных выше), или оно просто остается пустым. Это показывает следующее поведение
-Если схема отсутствет в БД: - Создает схему
-Если схема присутствует в БД: - обновите схему.


drop - Схема базы данных будет удалена и создана впоследствии.



  • Жизненный цикл Entity в Hibernate? Рассказать.

1) new — объект создан, но при этом ещё не имеет сгенерированных первичных ключей и пока ещё не сохранен в базе данных;

2) managed — объект создан, управляется JPA, имеет сгенерированные первичные ключи;

3) detached — объект был создан, но не управляется (или больше не управляется) JPA;

4) removed — объект создан, управляется JPA, но будет удален после commit'a транзакции;

  • 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 в определенных случаях.



  • ACID принципы транзакций