Интервю за Java EE - Често задавани въпроси за Java Persistence API (JPA).

Интервю за Java EE - Java Persistence API (JPA) Въпроси и отговори. Част 1

Общи въпроси и отговори относно Java Persistence API - JPA. Част 1.

Този раздел е копиран от статията на Хабр https://habrahabr.ru/post/265061/, т.к. много стандартни, както и по-задълбочени теми са разгледани там. Можете също да видите раздела за Hibernate (рамката е реализация на JPA и свързани теми), като отидете на списъка с въпроси в раздела EE.

към списъка с въпроси в секцията JEE

1. Какво е JPA? 2. Каква е разликата между JPA и Hibernate? 3. Възможно ли е да се използва JPA с noSQl бази данни? 4. Каква е разликата между JPA и JDO? 5. Какво е Entity? 6. Може ли клас Entity да наследява от класове, които не са Entity? 7. Може ли клас Entity да наследява от други класове Entity? 8. Може ли клас, който не е Entity, да наследи от клас Entity? 9. Може ли Entity да бъде абстрактен клас? 10. Какви изисквания на JPA за класове Entity можете да изброите (поне шест изисквания)? 11. Кои са двата типа елементи, които класовете Entity имат. Или с други думи, избройте два вида достъп (достъп) до елементите на Entity classes. 12. Какво е атрибут на клас Entity в терминологията на JPA? 13. Какви типове данни са разрешени в атрибутите на класа на обект (полета или свойства)? 14. Какви типове данни могат да се използват в атрибутите, включени в първичния ключ на класа Entity (съставен или прост), така че полученият първичен ключ да може да се използва за всяка база данни? А в случай на автоматично генериран първичен ключ (генерирани първични ключове)? 15. Какво е Embeddable клас? 16. Може ли клас за вграждане да съдържа друг клас за вграждане? 17. Може ли клас за вгражданесъдържат връзки с други обекти или колекции от обекти? Ако е така, има ли ограничения за подобни взаимоотношения? 18. Какви са изискванията на JPA за вградени (Embeddable) класове? 19. Какви типове връзки (отношения) между Entity познавате (избройте осем типа или посочете четири типа връзки, всяка от които може да бъде разделена на още два типа)? 20. Какво е картографиран суперклас? 21. Какви са трите типа стратегии за картографиране на наследяване, описани в JPA? 22. Какви два вида стратегии за извличане в JPA познавате? 23. Какво е EntityManager и какви са основните му функции, които можете да изброите? 24. Кои четири състояния на жизнения цикъл на екземпляр на обект можете да изброите? 25. Как операцията persist засяга обектите Entity на всяко от четирите състояния? 26. Как операцията за премахване засяга обектите Entity на всяко от четирите състояния? 27. Как операцията по сливане засяга обекти Entity на всяко от четирите състояния? 28. Как операцията за опресняване засяга обектите Entity на всяко от четирите състояния? 29. Как операцията за отделяне засяга обектите Entity на всяко от четирите състояния?

30. За какво е основната анотация? 31. За какво е анотация на Access? 32. Какви анотации могат да се използват за отмяна на връзки или атрибути на обекти, наследени от суперклас или зададени във вграждащ се клас, когато се използва този вграждаем клас в един от класовете на обекти и не се отменя в други? 33. Коя анотация може да контролира JPA кеширането за даден обект? 34. Какви анотации се използват за задаване на основния клас за преобразуване на атрибута Entity в друг тип при записване/извличане на данни от тяхната база (например работа с атрибута Entityбулев тип, но го съхранява като число в основата)? 35. Каква анотация може да се използва за указване на клас, чиито методи трябва да се изпълняват по време на определени JPA операции върху дадена единица или картографиран суперклас (като изтриване, промяна на данни и т.н.)? 36. За какво са методите за обратно извикване в JPA? Към какви обекти се прилагат анотациите на метода за обратно извикване? Избройте седем метода за обратно извикване (или еквивалентни анотации за метод за обратно извикване) 37. Какви анотации служат за задаване на реда на издаване на елементи от колекции на обекти? 38. Каква анотация може да се използва за изключване на полета и свойства на обекти от съпоставяне (свойство или поле не е постоянно)? 40. Какви два вида кешове (cache) познавате в JPA и за какво служат? 41. Какви са опциите за конфигуриране на кеша от второ ниво (кеш от второ ниво) в JPA или по подобен начин опишете какви стойности може да приеме елементът на режим на споделен кеш от persistence.xml? 42. Как можете да промените настройките на стратегията за извличане на всеки атрибут на Entity за отделни заявки (query) или методи за търсене (find), тогава ако Enity има атрибут с fetchType = LAZY, но за конкретна заявка това трябва да се направи от EAGER или обратно? 43. Как можете да работите с кеша от второ ниво в кода (премахнете всички или определени обекти от кеша, разберете дали даденият обект е кеширан и т.н.)? 44. Как мога да получа JPA метаданни (информация за типове обекти, вградени и управлявани класове и т.н.)? 45. Какво е JPQL (Java Persistence Query Language) и как се различава от SQL? 46. Какво означава полиморфизъм в JPQL (Java Persistence query language) заявки и как да го изключите? 47. Какво представлява Criteria API и за какво се използва? 48. Каква е разликата в изискванията за Entity в Hibernate от изискванията за Entity, посочени в спецификацията на JPA (вж.въпрос 10)? 49. Каква е уникалната стратегия за наследяване в Hibernate, която не е в спецификацията на JPA? 50. Кои са основните нови функции в спецификацията JPA 2.1 в сравнение с JPA 2.0 (избройте поне пет или шест нови функции)?

1. Какво е JPA?

JPA (Java Persistence API) е спецификация на Java EE и Java SE, която описва система за управление на устойчивостта на Java обекти в таблици на релационни бази данни по удобен начин. Самата Java не съдържа реализация на JPA, но има много реализации на тази спецификация от различни компании (отворени и не). Това не е единственият начин за съхраняване на Java обекти в бази данни (ORM системи), но един от най-популярните в света на Java.

2. Каква е разликата между JPA и Hibernate?

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

3. Възможно ли е да се използва JPA с noSQl бази данни?

Като цяло JPA спецификацията говори само за картографиране на Java обекти към таблици на релационни бази данни, но има редица реализации на този стандарт за noSql бази данни: Kundera, DataNucleus, ObjectDB и редица други. Естествено, в този случай не всички характеристики на спецификацията, специфични за релационните бази данни, се прехвърлят напълно в базите данни nosql.

4. Каква е разликата между JPA и JDO?

JPA (Java Persistence API) и Java Data Objects (JDO) са две спецификации за запазване на Java обекти в бази данни. Ако JPA е фокусиран само върху релационни бази данни, тогава JDO е по-общспецификация, която описва ORM за всички възможни бази данни и хранилища. По принцип може да се мисли за JPA като за релационно специфична част от JDO спецификацията, въпреки че API на двете спецификации не са напълно еднакви. „Разработчиците“ на спецификациите също се различават – ако JPA се разработва като JSR, то JDO първо е разработен като JSR, сега се разработва като Apache JDO проект.

5. Какво е субект?

Entity е олекотен постоянен домейн обект. Основният програмен обект е клас обект, който също може да използва допълнителни класове, които могат да се използват като спомагателни класове или за запазване на състоянието на обекта.