2013-04-22 4 views
100

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

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

Я видел данные Spring JPA работает вокруг хранилищ (слой DAO: если я не ошибаюсь). Итак, я имею в виду, как он отличается от «Spring Data JPA + Hibernate» или только с режимом «Hibernate»?

ответ

95

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

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

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

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

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

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

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

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

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

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

+1

Могу ли я назвать репозитарий коллекцию сущностей, которыми управляет Spring? Я не знаю, почему, но поддержка Spring JPA с использованием репозиториев кажется очень похожей на EntityManager EJB - это правильное мышление или они совершенно разные по своей цели? Заранее спасибо. Мустафа. – Mustafa

+1

@Mustafa Большинство решений имеют общие основания. Жесткая цель может быть одинаковой, реализация отличается от задействованных интерфейсов. – Gamb

20

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

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

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

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

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

    enter image description here

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

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

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

    enter image description here
3

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

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

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

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

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

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

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

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

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

+0

Хотя эта ссылка может ответить на вопрос, лучше включить здесь [основные части ответа] (https://meta.stackexchange.com/a/8259) и предоставить ссылку для справки. Ответные ссылки могут стать недействительными, если связанная страница изменится. [Ответы, которые представляют собой нечто большее, чем ссылка, могут быть удалены] (https://stackoverflow.com/help/deleted-answers) – adiga

+0

Спасибо @adiga Я обновил свой ответ. – AmanSinghal