Spring Data JPA и Hibernate - PullRequest
0 голосов
/ 27 февраля 2019

Spring Data JPA не является реализацией JPA, это абстракция доступа к данным базы данных. Я не могу понять это выражение в области сравнения с реализацией JPA (скажем, Hibernate).При использовании Spring Data JPA для использования CRUD-операций вы должны расширяться из интерфейса CrudRepository.Но без Hibernate Spring Data JPA не может работать независимо, поскольку не может преобразовать Java-объект в Entity.НО!Hibernate также может выполнять операции CRUD.Итак, вопросы: 1.Почему разработчики используют Spring Data JPA (именно операции CRUD), если нам все еще нужно использовать HIBERNATE?2. Интерфейс CrudRepository - это просто интерфейс, он расширяется от интерфейса «Репозиторий».Мы расширяем его в нашем классе CRUD для реализации операций CRUD.Я не понимаю, как это работает.Как наш класс может выполнять операции CRUD, просто расширяя интерфейс.Нет реализованных методов. Как я могу ответить на эти вопросы сейчас:

  1. Это для упрощения кода.Поскольку для использования операций CRUD через Hibernate требуется больше кода.
  2. Пока что только мысли приходят на ум, что каким-то («волшебным») интерфейсом CrudRepository используются стандартные инструменты Hibernate для использования операций CRUD.

1 Ответ

0 голосов
/ 27 февраля 2019

JPA - это спецификация, которая задает стандартный набор классов, методов, аннотаций, соглашений и т. Д., Используемых для отображения объектов Java в реляционную базу данных.

Hibernate является одной из реализаций этой спецификации.Он реализует все, что определено в спецификациях JPA.

Spring Data JPA - это среда, в которой используется JPA, и поэтому для ее использования требуется реализация JPA (Hibernate или любая другая).Это уровень абстракции, построенный на основе стандартных спецификаций JPA.

Почему разработчики используют Spring Data JPA (именно операции CRUD), если нам все еще нужно использовать HIBERNATE?

Поскольку Spring-Data-JPA упрощает использование JPA из приложения Spring и упрощает определение репозиториев: все основные операции, которые вам обычно приходится писать вручную, если вы не используете Spring-Data-JPA, уже реализованы для вас рамки.Основанный на соглашениях и декларативных запросах, он реализует методы для вас, и это делает вещи быстрее, безопаснее и менее громоздкими для записи.

Я не понимаю, как это работает.Как наш класс может выполнять операции CRUD, просто расширяя интерфейс

Он использует динамические прокси: во время выполнения он использует отражение для проверки всех дополнительных методов, определенных в интерфейсе репозитория, и создает динамический прокси,т.е. класс, который реализует этот интерфейс и использует стандартный API JPA для реализации методов, определенных в интерфейсе.Это относительно продвинутая тема.Google для "динамического прокси Java", чтобы вы начали.Но вы также можете просто использовать фреймворк, не имея возможности написать его самостоятельно, так же, как вы используете компьютер, не понимая, как работает электроника.

...