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

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

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

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

Добавлен: 09.11.2023

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

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

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

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

  1. Основные аннотации 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

Диаграммы отношений сущностей, которая показывает связь "многие ко многим" между двумя сущностями
Обязательны ли аннотации @Column и @Table?

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

Во всех остальных случаях, все поля в классе, помеченном как @Entity, неявно станут столбцами этой таблицы.

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


  1. Чем 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 поддерживает такие понятия, как полиморфизм, наследование, ассоциация.


  1. Что такое Query? Как передать в объект Query параметры? это объект, содержащий себе HQL код.

Объектно-ориентированное представление запроса 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.



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

Как передать в Query параметры? Как выглядит запрос с местами подстановки параметров?

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

@Query("SELECT * FROM employee WHERE id = :employeeId")

Employee getById(long employeeId);

Перед параметром employeeId в запросе должно стоять двоеточие. Room возьмет значение этого параметра из метода и подставит его в запрос.


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

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

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

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

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

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

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

В случае, если я даю какое-либо значение этому свойству (скажем, abc вместо четырех значений, описанных выше), или оно просто остается пустым. Это показывает следующее поведение

-Если схема отсутствет в БД: - Создает схему

-Если схема присутствует в БД: - обновите схему.

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



  1. Требования 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)
    Entity класс должен содержать первичный ключ, то есть атрибут или группу атрибутов которые уникально определяют запись этого Entity класса в базе данных.





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

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

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

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

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


Следующий →← Предыдущая

Жизненный цикл гибернации


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

Жизненный цикл Hibernate содержит следующие состояния: -

  • Переходное состояние

  • Постоянное состояние

  • Обособленное состояние


Переходное состояние

  • Переходное состояние - это начальное состояние объекта.

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

  • Здесь объект не связан с Сессией. Итак, переходное состояние не связано ни с какой базой данных.

  • Следовательно, изменения в данных не влияют ни на какие изменения в базе данных.

  • Временные объекты существуют в куче памяти. Они не зависят от Hibernate.



  1. Сотрудник e = новый  Сотрудник (); // Здесь объект переходит в переходное состояние.  

  2. e.setId ( 101 );  

  3. e.setFirstName ( «Гаурав» );  

  4. e.setLastName ( «Чавла» );  


Постоянное состояние


  • Как только объект связан с Сессией, он переходит в постоянное состояние.

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

  • Здесь каждый объект представляет строку таблицы базы данных.

  • Итак, изменения в данных вносят изменения в базу данных.

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