Hibernate / JPA / Spring Data JPA
Повтори работу с базой данных через Java-объекты: отображение классов на таблицы, связи сущностей, их жизненный цикл, кеширование и блокировки. Разбери частые проблемы запросов, включая N+1, и возможности Spring Data JPA.
Версии в подборке: JPA 3.1–3.2, Hibernate 6–7, Spring Boot 3–4. Где поведение зависит от версии или это особенность Hibernate, а не спецификации JPA, — это сказано в ответе.
Вопросы
- Что такое ORM? Что такое JPA? Что такое Hibernate?
- Что такое EntityManager?
- Каким условиям должен удовлетворять класс чтобы являться Entity?
- Может ли абстрактный класс быть Entity?
- Может ли Entity класс наследоваться от не Entity классов (non-entity classes)?
- Может ли Entity класс наследоваться от других Entity классов?
- Может ли не Entity класс наследоваться от Entity класса?
- Что такое встраиваемый (Embeddable) класс? Какие требования JPA устанавливает к встраиваемым (Embeddable) классам?
- Что такое Mapped Superclass?
- Какие три типа стратегий наследования мапинга (Inheritance Mapping Strategies) описаны в JPA?
- Как мапятся Enum'ы?
- Как мапятся даты и время?
- Как “смапить” коллекцию примитивов?
- Какие есть виды связей?
- Что такое владелец связи?
- Что такое каскады?
- Разница между PERSIST и MERGE?
- Какие два типа fetch стратегии в JPA вы знаете?
- Какие четыре статуса жизненного цикла Entity объекта (Entity Instance’s Life Cycle) вы можете перечислить?
- Как влияет операция persist на Entity объекты каждого из четырех статусов?
- Как влияет операция remove на Entity объекты каждого из четырех статусов?
- Как влияет операция merge на Entity объекты каждого из четырех статусов?
- Как влияет операция refresh на Entity объекты каждого из четырех статусов?
- Как влияет операция detach на Entity объекты каждого из четырех статусов?
- Для чего нужна аннотация Basic?
- Для чего нужна аннотация Column?
- Для чего нужна аннотация Access?
- Для чего нужна аннотация @Cacheable?
- Для чего нужна аннотация @Cache?
- Для чего нужны аннотации @Embedded и @Embeddable?
- Как смапить составной ключ?
- Для чего нужна аннотация ID? Какие @GeneratedValue вы знаете?
- Расскажите про аннотации @JoinColumn и @JoinTable? Где и для чего они используются?
- Для чего нужны аннотации @OrderBy и @OrderColumn, чем они отличаются?
- Для чего нужна аннотация Transient?
- Какие шесть видов блокировок (lock) описаны в спецификации JPA (или какие есть значения у enum LockModeType в JPA)?
- Какие два вида кэшей (cache) вы знаете в JPA и для чего они нужны?
- Как работать с кешем 2 уровня?
- Что такое JPQL/HQL и чем он отличается от SQL?
- Что такое Criteria API и для чего он используется?
- Расскажите про проблему N+1 Select и путях ее решения.
- Dirty checking механизм Hibernate
- Как работают репозитории Spring Data JPA?
- Как работает save() в Spring Data JPA: persist или merge?
- Persistence context, flush и FlushMode
- Что такое Open Session In View и почему его выключают?
- LazyInitializationException: причины и решения
- Как правильно реализовать equals/hashCode у Entity и почему @Data на Entity — плохо?
- Оптимистическая и пессимистическая блокировка в JPA
- Как ускорить массовую вставку в Hibernate?
- Проекции в Spring Data JPA