Файл: 1. Что такое Maven Для чего он нужен Как добавлять в проект библиотеки без него.docx

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

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

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

Добавлен: 30.11.2023

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

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

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


1) Сущности (Entities): это объекты, которые представляют таблицы в базе данных. В JPA сущности обозначаются аннотацией @Entity. В Hibernate, помимо аннотаций, сущности также могут быть описаны с помощью файлов маппинга в формате XML.

2) Менеджеры сущностей (Entity Managers): это объекты, которые управляют жизненным циклом сущностей в приложении. Они обеспечивают CRUD-операции (create, read, update, delete), а также поиск и выборку данных. В JPA менеджер сущностей представлен интерфейсом EntityManager, а в Hibernate — классом Session.

3) Фабрики (Factories): это объекты, которые используются для создания других объектов, таких как менеджеры сущностей, провайдеры персистенции и т.д. В JPA фабрика представлена интерфейсом EntityManagerFactory, а в Hibernate — классом SessionFactory.

4) Запросы (Queries): это объекты, которые представляют запросы к базе данных. В JPA они реализованы с помощью интерфейса Query, а в Hibernate — классов Query и Criteria.

5) Транзакции (Transactions): это объекты, которые управляют транзакциями базы данных. В JPA они реализованы с помощью интерфейса EntityTransaction, а в Hibernate — класса Transaction.

6) Провайдеры персистенции (Persistence Providers): это реализации JPA, которые позволяют использовать этот API в конкретном приложении. Например, Hibernate является провайдером персистенции для JPA.

(В целом, JPA и Hibernate взаимосвязаны следующим образом: JPA является спецификацией, которая определяет стандартные интерфейсы и аннотации для работы с объектно-реляционным отображением, а 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 в определенных случаях.)
15. Основные аннотации Hibernate, рассказать.


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

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

@Id: аннотация, используемая для указания, что поле является первичным ключом в таблице базы данных.

@GeneratedValue: аннотация, используемая для указания, как должны генерироваться значения для первичного ключа. (Например, @GeneratedValue(strategy = GenerationType.IDENTITY) указывает, что значения первичного ключа должны быть автоматически генерируемыми и уникальными.)

@Column: аннотация, используемая для указания имени столбца таблицы базы данных, связанной с полем класса.

@OneToOne: аннотация, используемая для указания отношения "один-к-одному" между двумя классами.

@OneToMany: аннотация, используемая для указания отношения "один-ко-многим" между двумя классами. (Например, если один объект класса A связан с множеством объектов класса B, то аннотацию можно использовать для указания этого отношения.)

@ManyToOne: аннотация, используемая для указания отношения "многие-к-одному" между двумя классами. (Например, если множество объектов класса B связано с одним объектом класса A, то аннотацию можно использовать для указания этого отношения.)

@ManyToMany: аннотация, используемая для указания отношения "многие-ко-многим" между двумя классами.

@JoinTable: аннотация, используемая для указания имени таблицы, используемой для связи объектов из разных таблиц базы данных.

@JoinColumn @Version @OrderBy

(Аннотация @MapsId в Hibernate используется для установки соответствия между первичным ключом (id) сущности-родителя и вложенным объектом. Она указывает, что идентификатор родительской сущности также должен использоваться как идентификатор вложенного объекта. Например, позволяет связать эти две сущности по общему идентификатору и создавать их одновременно
)
16. Чем HQL отличается от SQL?

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

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

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

Преимущества HQL:

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

Недостатки HQL:

Поскольку HQL является объектно-ориентированным языком запросов, его производительность может быть несколько ниже, чем у SQL, особенно при выполнении сложных запросов.
17. Что такое Query? Как передать в объект Query параметры?

Что такое Query?

(HQL запрос всегда начинается с получения объекта Query из Session вызовом метода createQuery(), в который передаётся текст запроса.)

Интерфейс Query 
представляет собой объект для выполнения запросов к базе данных.

Объект Query можно создать (в JPA/Hibernate) используя метод:

Session.createQuery() - для создания запросов на основе JPQL (HQL);

Session.createNativeQuery() - для создания запросов на основе SQL.

(JPQL - Java Persistence Query Language)

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

Для передачи параметров в объект Query, мы можно использовать именованные или позиционные параметры.

Именованные параметры обозначаются символом двоеточия (:), за которым следует имя параметра. В запросе используется имя параметра, и его значение устанавливается с помощью метода setParameter() объекта Query. Например:

Позиционные параметры обозначаются символом вопроса (?). В запросе используется порядковый номер параметра, начиная с 1, и его значение устанавливается с помощью метода setParameter() объекта Query. Например:

(Кроме того, объект Query поддерживает множество других методов для настройки запросов и получения результатов, таких как setFirstResult(), setMaxResults(), getSingleResult() и т.д.)
18. Какие можно устанавливать параметры в hbm2ddl, рассказать про каждый из них.

hbm2ddl (Hibernate Mapping to Database DDL) - это инструмент, который позволяет автоматически создавать и обновлять таблицы базы данных на основе сущностей Hibernate. Он использует информацию о маппинге Hibernate, чтобы сгенерировать соответствующий SQL для создания и обновления таблиц базы данных.

create: таблицы базы данных будут созданы заново каждый раз при запуске приложения.

update: таблицы базы данных будут обновлены в соответствии с изменениями в маппинге Hibernate.

create-drop: таблицы базы данных будут созданы заново при запуске приложения, а затем снова уничтожены при остановке приложения.