Jaka jest różnica między JPA a Spring Data JPA?

144

Jestem trochę zdezorientowany różnicą między Spring Data-JPA a JPA. Wiem o JPA, że jest to specyfikacja utrwalania obiektów Java w relacyjnej bazie danych przy użyciu popularnej technologii ORM.

Innymi słowy, JPA dostarcza interfejsy i inne technologie ORM, implementuje interfejsy znane jako dostawca JPA, np. Hibernate.

Czym dokładnie jest Spring Data JPA?

Czy Spring Data JPA dodał więcej funkcji (interfejsów) w porównaniu z JPA i nadal jest określony tylko, czy też jest dostawcą JPA?

Widziałem, jak Spring Data JPA działa wokół repozytoriów (warstwa DAO: jeśli się nie mylę). Mam na myśli, czym różni się używanie „Spring Data JPA + Hibernate” lub tylko używanie „Hibernate”?

DHRUV BANSAL
źródło

Odpowiedzi:

126

Widziałem Spring, JPA działa wokół repozytoriów (warstwa DAO: jeśli się nie mylę). Więc mam na myśli, czym różni się używanie „Spring JPA + Hibernate” lub tylko bezpośrednie używanie „Hibernate”?

Jak powiedziałeś, JPA jest specyfikacją, podczas gdy Hibernate jest konkretną implementacją tej specyfikacji (te implementacje są zwykle nazywane dostawcami ). Korzystając z Hibernacji, wiążesz się z tym dostawcą, ograniczając swobodę przełączania się na inną opcję, gdy jest to wymagane (na przykład chcesz zamiast tego użyć EclipseLink lub ObjectDB, ponieważ Hibernate ma błąd, który zatrzymuje proces programowania).

Cytowanie Wiosna JPA Danych „s dokumentacji:

Wdrażanie warstwy dostępu do danych w aplikacji było uciążliwe od dłuższego czasu. Należało napisać zbyt dużo gotowego kodu. Klasy domen były anemiczne i nie zostały zaprojektowane w sposób rzeczywisty obiektowy lub sterowany domeną.

Korzystanie z obu tych technologii znacznie ułatwia życie programistom pod względem trwałości bogatego modelu domeny. Niemniej jednak ilość gotowego kodu do implementacji repozytoriów, szczególnie jest nadal dość wysoka. Tak więc celem abstrakcji Spring Data z repozytorium jest znaczne zmniejszenie wysiłku związanego z implementacją warstw dostępu do danych dla różnych magazynów trwałości.

Podsumowując, jest to dodatek do JPA, który dodaje kolejną warstwę abstrakcji, definiując projekt oparty na standardach, aby wspierać warstwę trwałości w kontekście Spring. Te zdefiniowane interfejsy (znane Springowi) zapewniają usługi obsługiwane przez framework przy użyciu JPA do obsługi wyników. Definiujesz repozytorium w taki sposób, w jaki Spring może przeskanować projekt i go znaleźć:

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

W ten sposób umożliwiając korzystanie z niego w kontekście kontenera lub poza nim.

A teraz, czym właściwie jest wiosna, JPA. Czy Spring, JPA dodał więcej funkcji (interfejsy) w porównaniu z JPA i nadal jest określony tylko, czy też jest dostawcą JPA?

Spring Data JPA zawiera definicję implementacji repozytoriów, które są obsługiwane pod maską, odwołując się do specyfikacji JPA, używając zdefiniowanego dostawcy.

Fritz
źródło
1
Czy mogę nazwać Repository kolekcją obiektów zarządzanych przez Spring? Nie wiem dlaczego, ale obsługa Spring JPA przy użyciu repozytoriów wydaje się bardzo podobna do EntityManager firmy EJB - czy to właściwe myślenie, czy też mają one zupełnie inny cel? Z góry dziękuję. Mustafa.
Mustafa
1
@Mustafa Większość rozwiązań ma wspólne podstawy. Chociaż cel może być ten sam, implementacja jest inna ze względu na zaangażowane interfejsy.
Fritz,
35

Java Persistence API, czasami nazywana JPA, jest strukturą Java zarządzającą danymi relacyjnymi w aplikacjach korzystających z Java Platform, Standard Edition (JavaSE) i Java Platform, Enterprise Edition (JavaEE).

Trwałość w tym kontekście obejmuje trzy obszary:

  • Sam interfejs API zdefiniowany w javax.persistencepakiecie.

  • Język Java Persistence Query Language (JPQL).

  • Metadane obiektowo-relacyjne.

    wprowadź opis obrazu tutaj

Spring Data JPA jest częścią projektu parasolowego Spring Data, który ułatwia wdrażanie repozytoriów opartych na JPA.

Cechy:

  • Zaawansowana obsługa tworzenia repozytoriów w oparciu o Spring i JPA
  • Obsługa predykatów QueryDSL, a tym samym zapytań JPA o bezpiecznym typie
  • Przejrzysty audyt klasy domeny
  • Obsługa paginacji, dynamiczne wykonywanie zapytań, możliwość integracji niestandardowego kodu dostępu do danych
  • Sprawdzanie poprawności @Queryzapytań z adnotacjami w czasie ładowania początkowego
  • Obsługa mapowania jednostek opartych na XML
  • Konfiguracja repozytorium oparta na JavaConfig poprzez wprowadzenie @EnableJpaRepositories

    wprowadź opis obrazu tutaj
Shreyos Adikari
źródło
3

JPA

JPA to specyfikacja, która standaryzuje sposób mapowania obiektów Java na system relacyjnej bazy danych. Będąc tylko specyfikacji JPA składa się z zestawu interfejsów, takich jak EntityManagerFactory, EntityManageri adnotacje, które pomogą Ci mapować podmiot obiekt Java tabeli bazy danych.

Istnieje kilku dostawców JPA, takich jak HIbernate, EclipseLink lub Open JPA, z których możesz korzystać.

Spring Data JPA

Spring Data JPA to abstrakcja dostępu do danych JPA. Podobnie jak JPA, Spring Data JPA nie może działać bez dostawcy JPA.

Spring Data JPA oferuje rozwiązanie dla wzorca DDDRepository lub DAO (Data Acess Object) pattern. Może również generować zapytania JPA w Twoim imieniu za pomocą konwencji nazw metod.

Spring Data JPA może współpracować z Hibernate, Eclipse Link lub dowolnym innym dostawcą JPA. Bardzo interesującą zaletą używania Springa lub Java EE jest to, że można deklaratywnie kontrolować granice transakcji za pomocą @Transactionaladnotacji .

Vlad Mihalcea
źródło