Quelle est la différence entre Hibernate et Spring Data JPA

Quelles sont les principales différences entre Hibernate et Spring Data JPA? Quand ne devrions-nous pas utiliser Hibernate ou Spring Data JPA? En outre, quand le modèle Spring JDBC peut-il mieux fonctionner que Hibernate / Spring Data JPA?

105
demandé sur kc2001 2014-05-26 09:00:31

4 réponses

Hibernate est une implémentation JPA, tandis que Spring Data JPA est une Abstraction D'accès aux données JPA. Spring Data offre une solution aux implémentations personnalisées GenericDao. Il peut également générer des requêtes JPA en votre nom via les conventions de nom de méthode.

Avec Spring Data, vous pouvez utiliser Hibernate, Eclipse Link ou tout autre fournisseur JPA. Un avantage très intéressant est que vous pouvez contrôler les limites de transaction de manière déclarative en utilisant l'annotation @Transactional .

Spring JDBC est beaucoup plus léger, et il est destiné à l'interrogation native, et si vous avez seulement l'intention d'utiliser JDBC seul, alors vous feriez mieux d'utiliser Spring JDBC pour gérer la verbosité JDBC.

Donc, Hibernate, et les données de printemps sont complémentaires plutôt que des concurrents.

147
répondu Vlad Mihalcea 2018-05-08 03:11:15

Il y a 3 choses différentes que nous utilisons ici:

  1. JPA: api de persistance Java qui fournit des spécifications pour la persistance, la lecture, la gestion des données de votre objet java vers les relations dans la base de données.
  2. Hibernate: il existe différents fournisseurs qui implémentent jpa. Hibernate est l'un d'entre eux. Nous avons donc d'autres fournisseurs ainsi. Mais si vous utilisez jpa avec spring, cela vous permet de passer à différents fournisseurs à l'avenir.
  3. Spring Data JPA: Ceci est une autre couche au-dessus de jpa quel printemps fournir pour rendre votre vie facile.

voyons donc comment spring data JPA et spring + hibernate fonctionnent-


Données de printemps JPA:

Disons que vous utilisez spring + hibernate pour votre application. Maintenant, vous devez avoir une interface et une implémentation dao où vous allez écrire l'opération crud en utilisant SessionFactory de hibernate. Disons que vous écrivez la classe dao pour la classe Employee, demain dans votre application, vous devrez peut-être ecrire une opération crud similaire pour toute autre entité. Il y a donc beaucoup de code standard que nous pouvons voir ici.

Maintenant, Spring data JPA nous permet de définir des interfaces dao en étendant ses dépôts (crudrepository, jparepository) afin de vous fournir une implémentation dao à l'exécution. Vous n'avez plus besoin d'écrire l'implémentation dao.C'est comment spring data JPA rend votre vie facile.

67
répondu Bhagwati Malav 2018-02-20 07:45:48

Je ne suis pas d'accord SpringJPA rend la vie facile. Oui, il fournit des classes et vous pouvez faire un DAO simple rapide, mais en fait, c'est tout ce que vous pouvez faire. Si vous voulez faire quelque chose de plus que findById() ou save, vous devez passer par l'Enfer:

  • Pas D'accès EntityManager dans org.springframework.données.classes de référentiel (c'est la classe JPA de base!)
  • Gestion propre des transactions (hibernate transactions non autorisées)
  • d'énormes problèmes avec plus d'une source de données configuration
  • aucun regroupement de sources de données (HikariCP doit être utilisé en tant que Bibliothèque tierce)

Pourquoi la gestion des transactions est un inconvénient? Puisque Java 1.8 autorise les méthodes par défaut dans les interfaces, les transactions basées sur l'annotation Spring, simple ne fonctionne pas.

Malheureusement, SpringJPA est basé sur des réflexions, et parfois vous devez pointer un nom de méthode ou un paquet d'entité dans des annotations (!). C'est pourquoi tout refactoring fait grand crash. Malheureusement, @ Transactional fonctionne pour DS primaire uniquement : (donc, si vous avez plus d'une source de données, remember-transactions fonctionne uniquement pour la source primaire:)

Quelles sont les principales différences entre Hibernate et Spring Data JPA?

Hibernate est compatible JPA, compatible SpringJPA Spring. Votre Dao HibernateJPA peut être utilisé avec JavaEE ou Hibernate Standalone, lorsque SpringJPA peut être utilisé dans Spring-SpringBoot par exemple

Quand ne devrions-nous pas utiliser Hibernate ou Spring Data JPA? En outre, quand le modèle Spring JDBC peut-il mieux fonctionner que Hibernate / Spring Data JPA?

Utilisez Spring JDBC uniquement lorsque vous devez utiliser beaucoup de jointures ou lorsque vous devez utiliser Spring ayant plusieurs connexions datasource. Généralement, évitez JPA pour les jointures.

Mais mon conseil général, utilisez une nouvelle solution-Daobab ( http://www.daobab.io ). Daobab est Java et tout intégrateur de moteur JPA et aidera beaucoup dans vos tâches:)

2
répondu Klaudiusz Wojtkowiak 2018-09-27 09:21:32

Hiternate est une implémentation de " jpa " qui est une spécification pour les objets java dans la base de données

Je recommande d'utiliser W. R. t jpa car vous pouvez basculer entre différents ORM.

Lorsque vous utilisez JDBC, vous devez utiliser des requêtes SQL - si vous maîtrisez, optez pour JDBC

0
répondu thoopalliamar 2018-08-04 19:33:23