MongoDB 是否适用于 JPA?

Does MongoDB work with JPA?

我刚接触数据库,所以我的问题可能很天真。我目前有一个使用 JPA 的 Spring 数据的项目。我在后台使用 Hibernate 和 MySQL。可以切换到MongoDB吗?当我用谷歌搜索 "jpa MongoDB" 时,顶部的 link 显示了一些有趣的东西(DataNucleus JPA and MongoDB). This link: MongoDB docs 似乎表明 Java 驱动程序是 JPA 兼容的,那么换出数据库实现应该很简单吗?

你应该可以通过一些工作将它们换掉。这是来自 Spring.io 站点的示例指南:Accessing Data with MongoDB

您将使用 Mongo 存储库,而不是使用 JPA 存储库...示例应该足以让您了解。

EclipseLink 扩展 JPA 以支持 MongoDB:https://wiki.eclipse.org/EclipseLink/Examples/JPA/NoSQL

是的,DataNucleus JPA 允许它,以及许多其他数据库。您可以通过对其他类型的数据存储使用 JPA API 来做出妥协,但这样可以很容易地调查它们。

这在很大程度上取决于您对 "work" 的定义。 "Generally work"? - 是的。 "Reasonably work" - 视情况而定。 "Works seamlessly" - 没那么多。

JPA 本质上是一种关系型 API,因此请准备好 运行 这些方面:

  1. JPA 不支持 MongoDB 公开的许多功能。地理空间功能、upserts 等。您将需要自定义扩展,这首先会最大限度地减少使用 JPA 的好处。
  2. JPA 中的许多可用内容在 MongoDB(非关系世界)中没有任何意义,并且将不受支持。交易? MongoDB 中的连接列应该是什么?前者不可用实际上是非常危险的。如果 JPA 开发人员调用 transaction.rollback() 应该发生什么?严格来说,您不能 100%(根据定义)实现 JPA,大多数自称为 NoSQL 的 JPA 实现基本上只提供 JPA 的一小部分:一些用于映射的注释,一些 EntityManager API.
  3. 简单地将存储切换到对象模型背后也是一种谬论。特别是 NoSQL 存储的构建方式有利于某些数据结构(MongoDB 适合文档,Neo4j 适合高度互连的数据)。这意味着您将根据实际使用的商店以不同方式对域代码和转换器建模。任意切换商店会导致您将域模型减少到最小公分母,并且基本上会减少使用可能让您首先成为商店的功能。select。

虽然我可以看到将熟悉的 API 置于新事物之上以获得某种知识转移的动机,但最终认为如果目标 space 不支持密钥,这是一个谬论方面(例如交易)。到目前为止,我所看到的所有方法最终都会花费大量文档来记录 JPA 和商店方面不支持的内容。

也就是说,还有其他方法摆脱 "one API to rule them all" 并主动利用 NoSQL space 的多样性(想一想:一组由它们是什么定义的技术 not 根据定义会非常多样化)。

Spring Data project(免责声明:我是这方面的领导)正在提升一个抽象级别,而是提供一个一致的存储库编程模型,而不是一个,统一 API。这允许仍然提供对商店特定功能的支持,但一般使用方式保持不变。

所以我建议移至此处的专用 Spring 数据 MongoDB 项目。