Я видел Spring, JPA работает с репозиториями (слой DAO: если я не ошибаюсь). Итак, я имею в виду, чем отличается использование Spring JPA + Hibernate или только использование Hibernate напрямую?
Как вы сказали, JPA - это спецификация, а Hibernate - это конкретная реализация этой спецификации (эти реализации обычно называют провайдерами ). Используя Hibernate, вы привязываетесь к этому провайдеру, ограничивая свою свободу переключаться на другие опции, когда это необходимо (например, вы хотите использовать вместо этого EclipseLink или ObjectDB, поскольку в Hibernate есть ошибка, которая останавливает ваш процесс разработки).
Цитирование Spring Data JPA «S документации:
Реализация уровня доступа к данным приложения была довольно громоздкой. Слишком много стандартного кода должно было быть написано. Доменные классы были анемичными и не были разработаны в реальных объектно-ориентированных или управляемых доменами манерах.
Использование обеих этих технологий значительно облегчает жизнь разработчикам в отношении устойчивости богатой модели предметной области. Тем не менее, объем стандартного кода для реализации репозиториев, особенно все еще довольно высок. Таким образом, цель абстракции репозитория Spring Data состоит в том, чтобы значительно сократить усилия по реализации уровней доступа к данным для различных хранилищ данных.
Подводя итог, можно сказать, что в JPA добавлен еще один уровень абстракции, своего рода определение стандартного дизайна для поддержки уровня сохраняемости в контексте Spring. Эти определенные интерфейсы (известные Spring) предоставляют сервисы, которые фреймворк обрабатывает с использованием JPA для обслуживания результатов. Вы определяете хранилище так, чтобы Spring мог сканировать проект и находить его:
<repositories base-package="com.acme.repositories" />
Таким образом, позволяя использовать его в контексте контейнера или вне его.
Теперь что такое весна, JPA. Является ли Spring, JPA добавленным дополнительным функционалом (Интерфейсами) по сравнению с JPA, и все же он указан только или это также поставщик JPA?
Spring Data JPA предоставляет определение для реализации репозиториев, которые поддерживаются под капотом путем ссылки на спецификацию JPA с использованием определяемого вами провайдера.
Постоянство в этом контексте охватывает три области:
Сам API, определенный в
javax.persistence
пакете.Язык запросов персистентности Java (JPQL).
Объектно-реляционные метаданные.
Особенности:
@Query
аннотированных запросов во время начальной загрузки@EnableJpaRepositories
источник
JPA
JPA - это спецификация, которая стандартизирует способ отображения объектов Java на систему реляционных баз данных. Будучи просто спецификации, JPA состоит из набора интерфейсов, таких как
EntityManagerFactory
,EntityManager
и аннотаций , которые помогут вам отображающих объект сущности Java в таблице базы данных.Существует несколько поставщиков JPA, таких как HIbernate, EclipseLink или Open JPA, которые вы можете использовать.
Spring Data JPA
Spring Data JPA - это абстракция доступа к данным JPA. Spring Data JPA, как и JPA, не может работать без поставщика JPA.
Spring Data JPA предлагает решение DDD
Repository
шаблон илиDAO (Data Acess Object) pattern
. Он также может генерировать JPA-запросы от вашего имени с помощью соглашений имен методов.Spring Data JPA может работать с Hibernate, Eclipse Link или любым другим поставщиком JPA. Очень интересным преимуществом использования Spring или Java EE является то, что вы можете декларативно управлять границами транзакции с помощью
@Transactional
аннотации .источник