Ревью #1 - JDBC, Hibernate. 1. Что такое Maven Для чего он нужен Как добавлять в проект библиотеки без него
Скачать 0.65 Mb.
|
@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: таблицы базы данных будут созданы заново при запуске приложения, а затем снова уничтожены при остановке приложения. validate: Hibernate проверит, совпадают ли имена и типы колонок и полей в базе и в аннотациях. (Только проверяет соответствие схемы базы данных маппингу Hibernate, не создавая или обновляя таблицы в базе данных. Это самый частый режим.) none: Hibernate вообще ничего не будет делать. Если где-то база не совпадает с ожиданием, то будут сыпаться ошибки во время выполнения запросов. (hibernate.hbm2ddl.auto Автоматически проверяет или экспортирует DDL схемы в базу данных при создании; drop - Схема базы данных будет удалена и создана впоследствии; Если дать какое-либо другое значение этому свойству (скажем, abc), или оно просто остается пустым. Это показывает следующее поведение: -Если схема отсутствет в БД: - Создает схему -Если схема присутствует в БД: - обновите схему.) 19. Требования JPA к Entity-классам? Не менее пяти. 1) Должен быть отмечен аннотацией @Entity (или описан в XML файле конфигурации JPA); 2) Должен содержать public или protected конструктор без аргументов (он также может иметь конструкторы с аргументами); 3) Должен быть классом верхнего уровня (top-level class) не вложенный; 4) Не может быть enum или интерфейсом; 5) Не может быть финальным классом (final class); 6) Не может содержать финальные поля или методы, если они участвуют в маппинге; 9) Должен содержать первичный ключ, то есть атрибут или группу атрибутов, которые уникально определяют запись этого Enity класса в базе данных. 7) Если объект Entity класса будет передаваться по значению как отдельный объект, (например через удаленный интерфейс), он так же должен реализовывать Serializable интерфейс; 8) Поля Entity класса должны быть напрямую доступны только методам самого Entity класса и не должны быть напрямую доступны другим классам, использующим этот Entity (private, protected или package-private). (Другие классы должны обращаться только к методам getter/setter). 20. Жизненный цикл Entity в Hibernate? Рассказать. 1) Transient (новый) - Объект создан, но ещё не связан с базой данных (ни с одной сессией Hibernate) и не имеет первичного ключа. Объект-сущность находится в этом состоянии, когда он создается оператором new(). Поле Id у них не должно быть заполнено, иначе объект имеет состояние detached; 2) Persistent (управляемый) - Объект сохранен в базу данных и имеет первичный ключ. Объект в данном состоянии (хранимая сущность) присоединен к конкретной сессии и взаимодействует с БД. При работе с объектом данного типа в рамках транзакции все изменения объекта записываются в базу (при вызове метода commit() транзакции или при выполнении автоматической синхронизации состояний в Hibernate.); 3) Detached (отдельный) - объект в данном состоянии отсоединён от сессии и может существовать или не существовать в БД. (Объект-сущность всё ещё содержит данные из базы данных.) (Объект-сущность все ещё отслеживается фреймворком Hibernate и может быть снова связан с сессией при необходимости.); 4) Removed: Состояние, когда сущность ожидает удаления из базы данных. Как с помощью ResultSet получить данные из 2 строки 2 колонки таблицы? |