我很难决定我是应该在新项目中坚持使用Hibernate,还是应该用JPA和新的Spring Data实现。
SpringData框架适用于大型项目还是查询需求适中的小型项目?
虽然我确实看到了使用@Query
注解在减少代码量方面的优势,但是对于动态查询应该怎么做呢?当您想要实现一个相当复杂的保存()方法时又该怎么做呢?
文档中说要定制一个主仓库实现的接口和实现,但是如果你需要访问crud仓库本身的超级方法怎么办?crud仓库实现了定制的接口和实现,而不是相反。这看起来是一个奇怪的设计。
我很不确定这个框架是否能满足复杂和大型应用程序的挑战,我从来没有遇到过Hibernate的很多问题,我正在考虑坚持使用可靠的老框架,而不是Spring Data JPA。
我应该怎么做?如果我使用Spring Data JPA,我会遇到什么不可预见的复杂情况和成本?
3条答案
按热度按时间okxuctiv1#
所以,
spring-data
做了一些额外的魔法来帮助复杂的查询。一开始它很奇怪,你在文档中完全跳过它,但它真的很强大和有用。它包括创建一个定制的
Repository
和一个定制的'RepositoryImpl',并告诉Spring在哪里可以找到它。配置类-指向您仍然需要的xml配置,注解指向您的仓库包(它现在自动查找
*Impl
类):jpa-repositories.xml-告诉
Spring
在哪里可以找到你的存储库,还告诉Spring
查找文件名为CustomImpl
的自定义存储库:MyObjectRepository
-这里可以放置带注解和不带注解的查询方法。注意这个仓库接口是如何扩展Custom
接口的:MyObjectRepositoryCustom
-更复杂的存储库方法,无法通过简单的查询或注解进行处理:MyObjectRepositoryCustomImpl
-实际上,您使用自动连接的EntityManager
:令人惊讶的是,这一切都汇集在一起,并且当您这样做时,来自两个接口(以及您实现的CRUD接口)的方法都显示出来:
您将看到:
它真的很有效,而且你有一个查询接口,
spring-data
真的可以用于大型应用程序,而且你可以把越多的查询推到简单或注解中,你就越好。所有这些都在Spring Data Jpa站点上进行了记录。
bmp9r5qi2#
我在具有简单查询需求的小型和大型项目中使用过Spring Data JPA。主要的优点是甚至不必使用
@Query
注解。Spring Data中没有任何东西阻止您在大型项目中使用它,最近的QueryDSL
支持可能会帮助您使用QueryDSL来定位Hibernate。如果您预见到了复杂的查询,并且您觉得使用Hibernate对象而不使用JPA很舒服,我认为一种替代组合可能是在复杂的基于Hibernate的查询旁边使用简单的Spring Data
Repository
,并使用您可能需要的特定方法。将Hibernate实现扭曲到Spring Data JPA结构中可能会更方便。brccelvz3#
Spring JPA将为您提供大量的SQL抽象,甚至一些使用查询方法声明的HQL。Spring JPA的查询生成功能非常出色,但是当您想要一个纯粹的Hibernate解决方案时,您可以根据需要进行定制,因为Spring JPA仍然基于Hibernate。请查看docs http://static.springsource.org/spring-data/data-jpa/docs/current/reference/html了解更多信息。