Me está costando decidir si debería seguir con Hibernate para un nuevo proyecto o mojarme los pies con JPA y la nueva implementación de Spring Data.
¿El marco de Spring Data está destinado a proyectos grandes o pequeños con requisitos de consulta modestos?
Si bien ciertamente veo la ventaja en la reducción de código mediante el uso de la @Query
anotación, ¿qué haces para las consultas dinámicas? ¿Qué pasa cuando quieres implementar un método save () que es bastante complejo?
La documentación dice hacer una interfaz personalizada e implementación que implemente su repositorio principal, pero ¿qué sucede si necesita acceder a algún método súper en el repositorio de Crud? El repositorio crud implementa el personalizado, no al revés. Parece un diseño extraño.
No estoy seguro de si este marco responderá a los desafíos de las aplicaciones complejas y grandes. Nunca he tenido muchos problemas con Hibernate, y estoy considerando seguir con el viejo y confiable en lugar de ir con Spring Data JPA.
¿Qué tengo que hacer? ¿Qué complicaciones y costos imprevistos enfrentaré si uso Spring Data JPA?
Respuestas:
Entonces,
spring-data
hace un poco de magia extra que ayuda con consultas complejas. Al principio es extraño y lo omites por completo en los documentos, pero es realmente poderoso y útil.Implica crear una costumbre
Repository
'RepositoryImpl' y personalizado y decirle a Spring dónde encontrarlo. Aquí hay un ejemplo:Clase de configuración:
señale su configuración xml aún necesariacon una anotación que apunte a su paquete de repositorios (ahora busca*Impl
clases automáticamente):jpa-repositories.xml: indicaSpring
dónde encontrar tus repositorios. También indiqueSpring
que busque repositorios personalizados con elCustomImpl
nombre del archivo:MyObjectRepository
- Aquí es donde puede colocar métodos de consulta anotados y no anotados. Tenga en cuenta cómo esta interfaz de repositorio extiende elCustom
uno:MyObjectRepositoryCustom
- métodos de repositorio que son más complejos y no se pueden manejar con una simple consulta o anotación:MyObjectRepositoryCustomImpl
- donde realmente implementa esos métodos con un autoconectadoEntityManager
:Sorprendentemente, todo esto se combina y los métodos de ambas interfaces (y la interfaz CRUD que implementa) se muestran cuando lo hace:
Ya verás:
Realmente funciona. Y obtienes una interfaz para realizar consultas.
spring-data
Realmente está listo para una gran aplicación. Y cuantas más consultas pueda enviar a simples o anotaciones, mejor será.Todo esto está documentado en el sitio Spring Data Jpa .
Buena suerte.
fuente
JpaRepository
->MyJpaRepository
. También debe crear unMyJpaRepositoryFactoryBean
pero, si lo configura todo correctamente, puede anular el método .save (). Aquí están los documentos de Spring Data JPA: static.springsource.org/spring-data/data-jpa/docs/current/… ¡ No te rindas todavía!He usado Spring Data JPA en proyectos pequeños y grandes con demandas de consultas simples. La principal ventaja es que ni siquiera tiene que usar la
@Query
anotación. No hay nada en Spring Data que le impida usarlo en proyectos grandes y elQueryDSL
soporte reciente podría ayudarlo. Este es un ejemplo del uso de QueryDSL para apuntar a Hibernate.Si prevé consultas complejas y se siente cómodo utilizando objetos de Hibernate sin JPA, creo que una combinación alternativa podría ser tener los Spring Data simples
Repository
junto a los complejos basados en Hibernate con los métodos específicos que pueda necesitar. Puede ser menos engorroso que torcer una implementación de Hibernate en la estructura JPA de Spring Data.fuente
Spring JPA le proporcionará mucha abstracción al escribir SQL e incluso algo de HQL utilizando la declaración del método de consulta. Spring JPA brilla con su generación de consultas, pero cuando desea una solución puramente de hibernación, puede personalizarla según sea necesario, ya que spring JPA todavía se basa en hibernación. Consulte los documentos http://static.springsource.org/spring-data/data-jpa/docs/current/reference/html para obtener más información.
fuente