Spring Data-JPA против JPA: в чем разница?

Я немного озадачен разницей между Spring Data-JPA и JPA. Я знаю о JPA, что это спецификация для сохранения Java-объектов в реляционной базе данных с использованием популярной технологии ORM, т.е. другими словами, JPA предоставляет интерфейсы и другие технологии ORM, реализует эти интерфейсы, известные как поставщик JPA, например, Hibernate.

Теперь, что именно является Spring Data JPA. Является ли Spring Data JPA дополнительным функционалом (интерфейсами) над JPA, и все же он указан только или он также является поставщиком JPA?

Я видел, что Spring Data JPA работает с репозиториями (уровень DAO: если я не ошибаюсь). Итак, я имею в виду, чем отличается использование Spring Data JPA + Hibernate или только использование направления Hibernate?

7 ответов

Решение

Я видел Spring, JPA работает с репозиториями (слой DAO: если я не ошибаюсь). Итак, я имею в виду, чем отличается использование Spring JPA + Hibernate или только использование Hibernate напрямую?

Как вы сказали, JPA - это спецификация, а Hibernate - это конкретная реализация этой спецификации (эти реализации обычно называют провайдерами). Используя Hibernate, вы привязываетесь к этому провайдеру, ограничивая свою свободу при необходимости переключаться на другую опцию (например, вместо этого вы хотите использовать EclipseLink или ObjectDB, поскольку в Hibernate есть ошибка, которая останавливает ваш процесс разработки).

Цитирование документов Spring Data JPA:

Внедрение уровня доступа к данным приложения было довольно громоздким. Слишком много стандартного кода должно было быть написано. Доменные классы были анемичными и не были разработаны в реальных объектно-ориентированных или управляемых доменами манерах.

Использование обеих этих технологий значительно облегчает жизнь разработчикам в отношении устойчивости богатой модели предметной области. Тем не менее, объем стандартного кода для реализации репозиториев, особенно все еще довольно высок. Таким образом, цель абстракции репозитория Spring Data состоит в том, чтобы значительно сократить усилия по реализации уровней доступа к данным для различных хранилищ данных.

Подводя итог, можно сказать, что в JPA добавлен еще один уровень абстракции, своего рода определение стандартного дизайна для поддержки уровня сохраняемости в контексте Spring. Эти определенные интерфейсы (известные Spring) предоставляют сервисы, которые фреймворк обрабатывает с использованием JPA для обработки результатов. Вы определяете хранилище таким образом, чтобы Spring мог сканировать проект и находить его:

<repositories base-package="com.acme.repositories" />

Таким образом, позволяя использовать его в контексте контейнера или вне его.

Теперь что такое весна, JPA. Является ли Spring, JPA добавленным дополнительным функционалом (Интерфейсами) по сравнению с JPA, и все же он указан только или это также поставщик JPA?

Spring Data JPA предоставляет определение для реализации репозиториев, которые поддерживаются под капотом, путем ссылки на спецификацию JPA с использованием определяемого вами провайдера.

Java Persistence API, иногда называемый JPA, представляет собой среду Java, управляющую реляционными данными в приложениях с использованием платформы Java Standard Edition (JavaSE) и платформы Java Enterprise Edition(JavaEE).

Постоянство в этом контексте охватывает три области:

  • Сам API, определенный в javax.persistence пакет.

  • Язык запросов персистентности Java (JPQL).

  • Объектно-реляционные метаданные.

Spring Data JPA является частью общего проекта Spring Data, который облегчает реализацию репозиториев на основе JPA.

Особенности:

  • Сложная поддержка для создания репозиториев на основе Spring и JPA
  • Поддержка предикатов QueryDSL и, следовательно, безопасных типов запросов JPA
  • Прозрачный аудит класса домена
  • Поддержка разбиения на страницы, динамическое выполнение запросов, возможность интеграции пользовательского кода доступа к данным
  • Валидация @Query аннотированные запросы во время начальной загрузки
  • Поддержка сопоставления сущностей на основе XML
  • Конфигурация репозитория на основе JavaConfig путем введения @EnableJpaRepositories

JPA

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

Есть несколько провайдеров JPA, таких как HIbernate, EclipseLink или Open JPA, которые вы можете использовать.

Spring Data JPA

Spring Data JPA - это абстракция доступа к данным JPA. Как и JPA, Spring Data JPA не может работать без поставщика JPA.

Spring Data JPA предлагает решение DDDRepositoryузор или DAO (Data Acess Object) pattern. Он также может генерировать запросы JPA от вашего имени через соглашения об именах методов.

Spring Data JPA может работать с Hibernate, Eclipse Link или любым другим провайдером JPA. Очень интересным преимуществом использования Spring или Java EE является то, что вы можете декларативно управлять границами транзакций с помощью@Transactionalаннотация.

JPA - это API персистентности Java, который является стандартным API-интерфейсом Java для объектно-реляционного отображения.

JPA является только спецификацией - вам нужна его реализация, чтобы иметь возможность ее использовать. Hibernate является одной из самых известных и наиболее часто используемых реализаций JPA, но есть и другие, такие как EclipseLink JPA.

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

Spring Framework состоит из коллекции проектов, одним из которых является Spring Data.

Цель Spring Data - облегчить работу с различными типами баз данных, от традиционных реляционных баз данных до баз данных NoSQL. Spring Data поддерживает JPA через подпроект JPA Spring Data.

Чтобы написать программу, использующую JPA, вам нужна как минимум реализация JPA, например Hibernate.

Если вы используете Spring Framework для своего приложения, вы, скорее всего, захотите использовать Spring Data JPA вместе с Hibernate.

Эта ссылка должна быть полезной для лучшего понимания концепции:

https://spring.io/blog/2011/02/10/getting-started-with-spring-data-jpa/

маркетинг. Spring life-cyle следует шаблону риторики, что элемент X Java является злом, затем осознанию того, что он необходим, затем ребрендингу и утверждению, что он его изобрел.

Jpa — это спецификация java. Она используется для сохранения данных между объектом java и реляционной базой данных.Spring data jpa- это то же самое, что и jpa, означает, что мы можем описать его ниже.Spring Data Jpa - это доступ к абстракции данных jpa, что означает, что ему нравится jpa, но он добавляет некоторые дополнительные функции. Без jpa мы не можем реализовать jpa данных spring.

В Spring Data JPA предусмотрены черные ящики - классы org.springframework.data.repository. Не все методы выставлены здесь. Это ограничение, когда вам нужно сделать что-то сложное. Типичный JPA открыт - вы можете решить, как работать с Entity Manager, например, создать магические процедуры в вашем Dao и т. Д.

Вы можете поместить Daobab ( http://www.daobab.io/) поверх обеих технологий. Daobab обеспечивает интеграцию между Java и JPA, например:

List<String> names=Select.fieldList(daoPizza.colName())
 .where(daoPizza.colPizzaId(),Operator.GREATER_THAN,5).result();

Работает как на SprinDataJPA, так и на чистом JPA (Hibernate). Вот почему различия в структуре могут быть не важны для вас.

Другие вопросы по тегам