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.
Trwałość w tym kontekście obejmuje trzy obszary:
Sam interfejs API zdefiniowany w
javax.persistence
pakiecie.Język Java Persistence Query Language (JPQL).
Metadane obiektowo-relacyjne.
Cechy:
@Query
zapytań z adnotacjami w czasie ładowania początkowego@EnableJpaRepositories
źródło
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
,EntityManager
i 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 DDD
Repository
lubDAO (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ą
@Transactional
adnotacji .źródło