web-dev-qa-db-fra.com

Spring Data-JPA et JPA: quelle est la différence?

Je suis un peu confus quant à la différence entre Spring Data-JPA et JPA. Je sais à propos de JPA qu’il s’agit d’une spécification permettant de conserver les Java dans une base de données relationnelle utilisant la technologie ORM classique, c.-à-d. En d’autres termes, JPA fournit des interfaces et d’autres technologies ORM, implémente ces interfaces appelées fournisseur JPA par exemple Hibernate.

Maintenant, qu'est-ce que Spring Data JPA? Spring Data JPA a-t-il ajouté des fonctionnalités supplémentaires (interfaces) par rapport à JPA et cela n’est toujours spécifié que ou est-il également un fournisseur JPA?

J'ai vu Spring Data JPA travailler autour des référentiels (couche DAO: si je ne me trompe pas). Donc, je veux dire en quoi c'est différent avec 'Spring Data JPA + Hibernate' ou seulement avec 'Hibernate'?

134
DHRUV BANSAL

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 que 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, ce qui restreint votre liberté de changer d’option si nécessaire (par exemple, vous souhaitez utiliser EclipseLink ou ObjectDB à la place, car Hibernate a un bogue qui stoppe votre processus de développement).

Citant la documentation de Spring Data JPA:

L'implémentation d'une couche d'accès aux données d'une application est une tâche fastidieuse. Trop de code passe-partout a dû être écrit. Les classes de domaine étaient anémiques et n'ont pas été conçues de manière réellement orientée objet ou domaine.

L'utilisation de ces deux technologies facilite considérablement la vie des développeurs en ce qui concerne la persistance des modèles de domaine riche. Néanmoins, la quantité de code passe-partout pour mettre en œuvre les référentiels reste particulièrement élevée. L'objectif de l'abstraction de Spring Data dans le référentiel est donc de réduire considérablement les efforts d'implémentation des couches d'accès aux données pour différents magasins de persistance.

Pour résumer, il ajoute à JPA une autre couche d'abstraction, définissant en quelque sorte une conception standard pour prendre en charge Couche de persistance dans un contexte Spring. Ces interfaces définies (connues de Spring) fournissent les services que l'infrastructure supporte en utilisant 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 contexte d'un conteneur ou en dehors de celui-ci.

Maintenant, quel est exactement le printemps, JPA. Spring est-il Spring? JPA a ajouté des fonctionnalités supplémentaires (interfaces) par rapport à JPA, mais est-il uniquement spécifié ou s'agit-il également d'un fournisseur JPA?

Spring Data JPA fournit une définition permettant d'implémenter les référentiels pris en charge sous le capot en faisant référence à la spécification JPA, à l'aide du fournisseur que vous avez défini.

119
Fritz

L’API de persistance Java, parfois appelée JPA) est un cadre Java permettant de gérer des données relationnelles dans des applications à l’aide du Java Platform, Standard Edition (JavaSE) et Java Platform, Édition Entreprise (JavaEE).

Dans ce contexte, la persistance couvre trois domaines:

  • L'API elle-même, définie dans le javax.persistence paquet.

  • Le Java Langage de requête en persistance (JPQL)).

  • Métadonnées objet-relationnelles.

    enter image description here

Spring Data JPA fait partie du projet parapluie Spring Data qui facilite la mise en œuvre de référentiels basés sur JPA.

Caractéristiques:

  • Support sophistiqué pour la construction de référentiels basés sur Spring et JPA
  • Prise en charge des prédicats QueryDSL et, partant, des requêtes JPA adaptées aux types
  • Audit transparent de la classe de domaine
  • Prise en charge de la pagination, exécution de requêtes dynamiques, possibilité d'intégrer un code d'accès aux données personnalisé
  • Validation de @Query requêtes annotées à bootstrap heure)
  • Prise en charge du mappage d'entités basé sur XML
  • Configuration du référentiel basé sur JavaConfig en introduisant @EnableJpaRepositories

    enter image description here
33
Shreyos Adikari