J'ai du mal à décider si je devrais rester avec Hibernate pour un nouveau projet, ou me mouiller les pieds avec JPA et la nouvelle implémentation de Spring Data.
Le framework Spring Data est-il destiné aux grands projets ou aux petits projets avec des exigences de requête modestes?
Bien que je vois certainement l'avantage de la réduction du code en utilisant l' @Query
annotation, que faites-vous pour les requêtes dynamiques? Qu'en est-il lorsque vous souhaitez implémenter une méthode save () assez complexe?
La documentation dit de créer une interface personnalisée et une implémentation que votre référentiel principal implémente, mais que faire si vous avez besoin d'accéder à des super méthodes sur le référentiel crud lui-même? Le référentiel crud implémente le référentiel personnalisé - et non l'inverse. Cela semble être un design étrange.
Je ne sais pas si ce cadre répondra aux défis des applications complexes et volumineuses. Je n'ai jamais rencontré beaucoup de problèmes avec Hibernate, et j'envisage de m'en tenir au bon vieux fiable plutôt que d'utiliser Spring Data JPA.
Que devrais-je faire? Quelles complications et quels coûts imprévus vais-je rencontrer si j'utilise Spring Data JPA?
Réponses:
Alors,
spring-data
faites un peu de magie supplémentaire qui aide avec les requêtes complexes. C'est étrange au début et vous l'ignorez totalement dans la documentation mais c'est vraiment puissant et utile.Cela implique de créer un
Repository
`RepositoryImpl ' personnalisé et personnalisé et d'indiquer à Spring où le trouver. Voici un exemple:Classe de configuration -
pointez sur votre configuration xml encore nécessaireavec une annotation pointant vers votre package de référentiels (il recherche*Impl
automatiquement les classes maintenant):jpa-repositories.xml - indiqueSpring
où trouver vos dépôts. Dites égalementSpring
de rechercher des référentiels personnalisés avec leCustomImpl
nom de fichier:MyObjectRepository
- c'est ici que vous pouvez placer des méthodes de requête annotées et non annotées. Notez comment cette interface de référentiel étendCustom
celle:MyObjectRepositoryCustom
- des méthodes de référentiel plus complexes et ne pouvant être manipulées avec une simple requête ou une annotation:MyObjectRepositoryCustomImpl
- où vous implémentez réellement ces méthodes avec un autowiredEntityManager
:Étonnamment, tout cela est réuni et les méthodes des deux interfaces (et de l'interface CRUD, que vous implémentez) apparaissent toutes lorsque vous le faites:
Tu verras:
Cela fonctionne vraiment. Et vous obtenez une interface pour les requêtes.
spring-data
est vraiment prêt pour une grande application. Et plus vous pouvez intégrer de requêtes simples ou d'annotations, mieux vous vous portez.Tout cela est documenté sur le site Spring Data Jpa .
Bonne chance.
la source
JpaRepository
->MyJpaRepository
. Vous devez également créer unMyJpaRepositoryFactoryBean
mais si vous configurez tout correctement, vous pouvez remplacer la méthode .save (). Voici les documents JPA de Spring Data: static.springsource.org/spring-data/data-jpa/docs/current/ ... N'abandonnez pas pour l'instant!J'ai utilisé Spring Data JPA dans des projets petits et grands avec des requêtes simples. Le principal avantage est de ne même pas avoir à utiliser l'
@Query
annotation. Il n'y a rien dans Spring Data qui vous empêche de l'utiliser dans de grands projets et leQueryDSL
support récent pourrait vous aider. Voici un exemple d'utilisation de QueryDSL pour cibler Hibernate.Si vous prévoyez des requêtes complexes et que vous vous sentez à l'aise d'utiliser des objets Hibernate sans JPA, je pense qu'une combinaison alternative pourrait être d'avoir les simples Spring Data à
Repository
côté de celles basées sur Hibernate complexes avec les méthodes spécifiques dont vous pourriez avoir besoin. Cela peut être moins fastidieux que de transformer une implémentation Hibernate en une structure Spring Data JPA.la source
Spring JPA vous fournira beaucoup d'abstraction de l'écriture de SQL et même de HQL en utilisant la déclaration de méthode de requête. Spring JPA brille avec sa génération de requêtes, mais lorsque vous souhaitez une solution purement de mise en veille prolongée, vous pouvez la personnaliser selon vos besoins, car Spring JPA est toujours basé sur la mise en veille prolongée. Consultez la documentation http://static.springsource.org/spring-data/data-jpa/docs/current/reference/html pour plus d'informations.
la source