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.