JavaRush /Java Blog /Random-TL /Mga Tanong sa Panayam sa Hibernate
Dr-JohnZoidberg
Antas
Киев

Mga Tanong sa Panayam sa Hibernate

Nai-publish sa grupo
Ang artikulong ito ay pagsasalin at pagpapahusay ng mga banyagang artikulo (nakalista ang isang listahan ng mga mapagkukunan sa dulo ng artikulo). Pinalawak ang mga sagot sa ilang tanong, ibinibigay ang mga link sa mga mapagkukunan ng third-party na naglalaman ng mga sagot na maaaring lumabas sa proseso ng pagbabasa. 1) Ano ang Hibernate? Ito ay isang balangkas para sa object-relational na pagmamapa ng mga entity sa tradisyonal na relational database. Ang mga pangunahing tampok ng balangkas: 1) Awtomatikong pagbuo at pag-update ng mga talahanayan sa mga database; 2) Dahil ang mga pangunahing query sa database (pag-save, pag-update, pagtanggal at paghahanap) ay ipinakita bilang mga pamamaraan ng balangkas, ang code na isinulat ng developer ay makabuluhang nabawasan; 3) Nagbibigay ng paggamit ng isang SQL-like na wika (HQL - hibernate query language). Maaaring isulat ang mga query sa HQL kasama ng mga data object (mga klase ng POJO na inihanda para sa pagtatrabaho sa isang database). 2) Paano mag- hibernate помогает в программировании? Hibernate реализует ряд фичь которые значительно упрощают работу разработчика. — Одной из таких фичь является то, что hibernate позволяет разработчику избежать написания большинства SQL requestов (они уже реализованы , вам надо просто использовать методы которые предоставляет фреймворк). — Под бортом у Hibernate есть куча полезных инструментов которые значительно ускоряют работу applications, самыми примечательными из них являются двухуровневое кэширования и тонкие настройки lazy и fetch изъятия. — Сам генерирует таблицы в базу данных. 3) Способы конфигурации работы с Hibernate. Существует четыре способа конфигурации работы с Hibernate : — используя аннотации; — hibernate.cfg.xml; — hibernate.properties; — persistence.xml. Самый частый способ конфигурации : через аннотации и файл persistence.xml, что касается файлов hibernate.properties и hibernate.cfg.xml, то hibernate.cfg.xml главнее (если в приложение есть оба file, то принимаются настройки из file hibernate.cfg.xml). Конфигурация annotationми, хоть и удобна, но не всегда возможна, к примеру, если для разных баз данных or для разных ситуаций вы хотите иметь разные конфигурацию сущностей, то следует использовать xml файлы конфигураций. 4) Какие ключевые интерфейсы использует Hibernate? Существует пять ключевых интерфейсов которые используются в каждом приложении связанном с Hibernate: — Session interface; — SessionFactory interface; — Configuration interface; — Transaction interface; — Query and Criteria interfaces. 5) Какая роль интерфейса Session в Hibernate? Session — это основной интерфейс, который отвечает за связь с базой данных. Так же, он помогает создавать an objectы requestов для получение персистентных an objectов. (персистентный an object — an object который уже находится в базе данных; an object requestа — an object который получается когда мы получаем результат requestа в базу данных, именно с ним работает приложение). Обьект Session можно получить из SessionFactory : Session session = sessionFactory.openSession(); Роль интерфейса Session: — является оберткой для jdbc подключения к базе данных; (https://ru.wikipedia.org/wiki/Java_Database_Connectiv..) — является фабрикой для транзакций (согласно официальной documentации transaction — аllows the application to define units of work, что , по сути, означает что транзакция определяет границы операций связанных с базой данных). — является хранителем обязательного кэша первого уровня. 6) Какая роль интерфейса SessionFactory в Hibernate? Именно из an object SessionFactory мы получаем an objectы типа Session. На все приложение существует только одна SessionFactory и она инициализируеться вместе со стартом applications. SessionFactory кэширует мета-date и SQL requestы которые часто используются приложением во время работы. Так же оно кэширует информацию которая была получена в одной из транзакций и может быть использована и в других транзакциях. Обьект SessionFactory можно получить следующим обращением: SessionFactory sessionFactory = configuration.buildSessionFactory(); 7) Какие типы коллекций представлены в Hibernate? Bag, Set, List, Map, Array. 8) What собой являет коллекция типа Bag и зачем она используется? Своей реализации тип коллекции Bag очень напоминает Set, разница состоит в том, что Bag может хранить повторяющиеся значения. Bag хранит непроиндексированный список элементов. Большинство таблиц в базе данных имеют индексы отображающие положение element данных один относительно другого, данные индексы имеют представление в таблице в виде отдельной columns. При an objectно-реляционном маппинге, значения columns индексов мапится на индекс в Array, на индекс в List or на key в Map. Если вам надо получить коллекцию an objectов не содержащих данные индексы, то вы можете воспользоваться коллекциями типа Bag or Set (коллекции содержат данные в неотсортированном виде, но могут быть отсортированы согласно requestу). 9) Какая разница в работе методов load(); и get();? Метод load(); обычно используется когда в не уверен что запрашиваемый an object уже находится в базе данных. Если an object не найден, то метод кидает исключение Если an object найден — метод возвращает прокси an object, который является ссылкой на an object находящийся в базе данных (request в базу данных еще не был осуществлен, своего рода lazy изъятие), непосредственный request к базе данных когда мы непосредственно обращаемся к необходимому an objectу через прокси an object. Метод get(); используется тогда, вы на 100 процентов не уверены есть ли запрашиваемый an object в базе данных. В случае обращение к несуществующему an objectу, метод get(); вернет null. В случае нахождения an object, метод get(); вернет сам an object и request в базу данных будет произведен немедленно. 10) What такое Lazy fetching(изъятие) в Hibernate? Тип изьятия Lazy, в Hibernate, связан с листовыми(дочерними) сущностями и определяют политику совместного изъятия, если идет request на изъятие сущности родителя. Простой пример: Есть сущность Дом. Он хранит информацию о своем номере, улице, количество квартир и информацию о семьях которые живут в квартирах, эти семьи формируют дочернюю сущность относительно сущности Дом. Когда мы запрашиваем информацию о Доме, нам может быть совершенно ненужным знать информацию семьях которые в нем проживают, тут нам на помощь приходит lazy(ленивое) изъятие(fetching) которая позволяет сконфигурировать сущность Дом, чтобы информацию о семьях подавалась только по востребованию, это значительно облачает request и ускоряет работу applications. ©dev-bay
Mga komento
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION