J'ai vu Spring, JPA travaille autour de référentiels (couche DAO: si je ne me trompe pas). Donc je veux dire en quoi il est différent d'utiliser «Spring JPA + Hibernate» ou d'utiliser uniquement «Hibernate» directement?
Comme vous l'avez dit, JPA est une spécification tandis qu'Hibernate est une implémentation particulière de cette spécification (ces implémentations sont généralement appelées fournisseurs ). En utilisant Hibernate, vous vous associez à ce fournisseur limitant votre liberté de basculer vers une autre option si nécessaire (par exemple, vous souhaitez utiliser EclipseLink ou ObjectDB à la place car Hibernate a un bogue qui arrête votre processus de développement).
Citant Printemps des données JPA de » documentation:
La mise en œuvre d'une couche d'accès aux données d'une application a été lourde pendant un certain temps. Il a fallu écrire trop de code standard. Les classes de domaine étaient anémiques et n'ont pas été conçues d'une manière réelle orientée objet ou axée sur le domaine.
L'utilisation de ces deux technologies facilite beaucoup la vie des développeurs en ce qui concerne la persistance du modèle de domaine riche. Néanmoins, la quantité de code standard pour implémenter les référentiels, en particulier, est encore assez élevée. Ainsi, l'objectif de l'abstraction de référentiel de Spring Data est de réduire considérablement l'effort d'implémentation des couches d'accès aux données pour divers magasins de persistance.
Pour résumer, il s'ajoute à JPA en ajoutant une autre couche d'abstraction, une sorte de définition d'une conception standard pour prendre en charge la couche de persistance dans un contexte Spring. Ces interfaces définies (connues de Spring) fournissent les services que le framework gère à l'aide de JPA pour servir les résultats. Vous définissez un référentiel de manière à ce que Spring puisse analyser le projet et le trouver:
<repositories base-package="com.acme.repositories" />
Ainsi, vous permettant de l'utiliser dans le cadre d'un conteneur ou en dehors de celui-ci.
Maintenant, quel est exactement Spring, JPA. Spring, JPA a-t-il ajouté des fonctionnalités supplémentaires (interfaces) sur JPA et est-il toujours spécifié uniquement ou est-il également un fournisseur JPA?
Spring Data JPA fournit une définition pour implémenter des référentiels pris en charge sous le capot en référençant la spécification JPA, à l'aide du fournisseur que vous définissez.
La persistance dans ce contexte couvre trois domaines:
L'API elle-même, définie dans le
javax.persistence
package.Le langage de requête de persistance Java (JPQL).
Métadonnées objet-relationnelles.
Fonctionnalités:
@Query
requêtes annotées au moment du bootstrap@EnableJpaRepositories
la source
JPA
JPA est une spécification qui standardise la façon dont les objets Java sont mappés à un système de base de données relationnelle. Être juste une spécification, JPA se compose d'un ensemble d'interfaces, comme
EntityManagerFactory
,EntityManager
et les annotations qui vous aident à mapper un objet entité Java à une table de base de données.Il existe plusieurs fournisseurs JPA, comme HIbernate, EclipseLink ou Open JPA, que vous pouvez utiliser.
Spring Data JPA
Spring Data JPA est une abstraction d'accès aux données JPA. Tout comme JPA, Spring Data JPA ne peut pas fonctionner sans fournisseur JPA.
Spring Data JPA offre une solution au modèle DDD
Repository
ou auDAO (Data Acess Object) pattern
. Il peut également générer des requêtes JPA en votre nom via des conventions de nom de méthode.Spring Data JPA peut fonctionner avec Hibernate, Eclipse Link ou tout autre fournisseur JPA. Un avantage très intéressant de l'utilisation de Spring ou Java EE est que vous pouvez contrôler les limites de transaction de manière déclarative à l'aide de l'
@Transactional
annotation .la source