我之前没有使用过Spring Data,但是我已经多次使用Hibernate ORM用于基于MySQL的应用程序。我只是不明白为基于MongoDB的应用程序在两者之间选择哪个框架。
我已经尝试寻找答案,但我找不到在生产环境中对两者进行比较的答案。有没有人发现使用MongoDB使用这两个框架有问题?
免责声明:我是Spring Data项目的负责人,因此我将主要介绍Spring Data方面的内容:
我认为这两个项目之间的核心区别在于Hibernate OGM团队选择围绕JPA集中精力,而Spring Data团队明确没有。原因如下:
因此,对于Spring Data,我们选择为受支持的存储提供一致的编程模型,但不要试图将所有内容强制转换为一个过度抽象的API:您获得了众所周知的模板实现,您获得了存储库抽象,这对于所有商店,但让你利用商店特定的功能和概念。
免责声明:我是Hibernate OGM开发人员之一,因此我将尝试提供其背后的一些原因。
Hibernate OGM为NoSQL解决方案提供Java持久性(JPA)支持。它重用了Hibernate ORM的引擎,但将实体持久化到NoSQL数据存储区而不是关系数据库。它还旨在提供对JPA不适合时的特定数据存储功能的访问。
这种方法很有意思,原因如下:
@Embedded
,@EmbeddedCollection
和@Entity
(可以是基于所选数据存储的节点,文档或缓存)。不可否认,注释名称可能很奇怪,因为您还必须处理@Table
和@Column
。主要缺点是JPA的一些概念不容易映射到NoSQL世界:例如事务。虽然您可以访问事务划分方法,但您将无法回滚本机不支持事务的数据存储(在这种情况下,事务将用于对操作进行分组并尝试优化对数据库)。
此外,如果您的数据集本质上是非域模型中心,那么Hibernate OGM不适合您。
可以使用SpringData。如果你还记得Spring ORM也使用了一些JPA的东西,比如Entity,Transaction,并提供了JPA和Hibernate API的最佳东西。如果JPA对NoSQL越来越成熟,Spring社区将在未来的版本中使用。虽然这不是主要原因。大多数原因都由@Oliver Drotbohm描述。阅读SprinData的更多文档,进一步分析您的数据模型,数据存储连续性/增长的可扩展性,找到最适合您的解决方案,并考虑@Davide给出的建议。很多情况下,与MongoDB集成时,SpringData的成功率要高于JPA。