web-dev-qa-db-fra.com

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? De plus, quand le modèle Spring JDBC peut-il fonctionner mieux que le JPA Hibernate/Spring Data?

167
hard coder

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 à GenericDao implémentations personnalisées. 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 des transactions de manière déclarative à l'aide de l'annotation @Transactional .

Spring JDBC est beaucoup plus léger et est conçu pour les requêtes natives. Si vous souhaitez uniquement utiliser JDBC seul, il est préférable d’utiliser Spring JDBC pour gérer la verbosité de JDBC.

Ainsi, Hibernate et Spring Data sont complémentaires plutôt que concurrents.

213
Vlad Mihalcea

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

  1. JPA: Java api de persistance fournissant des spécifications pour la persistance, la lecture, la gestion des données de votre objet Java aux relations de 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 un autre fournisseur également. Mais si vous utilisez jpa avec spring, cela vous permet de changer de fournisseur à l'avenir.
  3. Spring Data JPA: Ceci est une autre couche au-dessus de jpa que les sources fournissent pour vous rendre la vie facile.

Voyons donc comment données printanières jpa et spring + hibernate fonctionne -


Spring Data JPA:

Supposons que vous utilisez spring + hibernate pour votre application. Maintenant, vous devez avoir une interface et une implémentation dao où vous allez écrire une opération crud en utilisant SessionFactory de Hibernate. Supposons que vous écriviez la classe Dao pour la classe Employé. Demain, dans votre application, vous pourriez avoir besoin d’écrire une opération similaire pour une 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 référentiels (crudrepository, jparepository) afin de vous fournir une implémentation DAO au moment de l’exécution. Vous n’avez plus besoin d’écrire l’implémentation dao. C’est comme ça que Spring Data vous facilite la vie.

104
Bhagwati Malav

Je suis en désaccord SpringJPA rend la vie facile. Oui, il fournit des cours et vous permet de créer rapidement des DAO simples, mais en fait, c'est tout ce que vous pouvez faire. Si vous voulez faire autre chose que findById () ou enregistrer, vous devez passer par l'enfer:

  • pas d'accès EntityManager dans les classes org.springframework.data.repository (il s'agit de la classe JPA de base!)
  • propre gestion des transactions (transactions hibernate non autorisées)
  • d'énormes problèmes avec plus d'une configuration de sources de données
  • pas de pool de sources de données (HikariCP doit être utilisé en tant que bibliothèque tierce)

Pourquoi sa propre gestion des transactions est un désavantage? Puisque Java 1.8 autorise les méthodes par défaut dans les interfaces, les transactions basées sur des annotations Spring ne sont pas simples.

Malheureusement, SpringJPA est basé sur des réflexions et vous devez parfois pointer un nom de méthode ou un package d'entité vers des annotations (!). C'est pourquoi tout refactoring fait un grand crash. Malheureusement, @Transactional fonctionne pour le principal DS seulement :( Donc, si vous avez plusieurs sources de données, rappelez-vous - les transactions fonctionnent uniquement pour le principal :)

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

Hibernate est compatible JPA et 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? De plus, quand le modèle Spring JDBC peut-il fonctionner mieux que le JPA Hibernate/Spring Data?

Utilisez Spring JDBC uniquement lorsque vous devez utiliser beaucoup de jointures ou si vous devez utiliser Spring avec plusieurs connexions de sources de données. En règle générale, évitez JPA pour les jointures.

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

16

Hibernate est une implémentation de "JPA" qui est une spécification pour les objets Java de la base de données.

Je recommanderais d'utiliser w.r.t JPA car vous pouvez basculer entre différents ORMS.

Lorsque vous utilisez JDBC, vous devez utiliser les requêtes SQL. Si vous maîtrisez le langage SQL, optez pour JDBC.

1
Thoopalliamar

Si vous préférez la simplicité et davantage de contrôle sur les requêtes SQL, je vous suggère d’utiliser Spring Data/Spring JDBC.

Sa bonne quantité d'apprentissage dans JPA et parfois difficile à résoudre les problèmes. D'autre part, si vous avez le contrôle total sur SQL, il devient beaucoup plus facile d'optimiser les requêtes et d'améliorer les performances. Vous pouvez facilement partager votre code SQL avec le DBA ou une personne ayant une meilleure compréhension de la base de données.

0
Gaurang Popat