我不熟悉使用数据库,所以我的问题可能很幼稚。我目前有一个使用Spring Data with JPA的项目。我正在使用Hibernate和MySQL。是否可以切换到MongoDB?当我用Google搜索“jpa MongoDB”时,顶部链接显示了一些有趣的内容(DataNucleus JPA and MongoDB)。这个链接:MongoDB docs似乎表明Java驱动程序符合JPA,那么交换数据库实现是否应该很简单?
答案 0 :(得分:4)
这在很大程度上取决于你对“工作”的定义。 “一般工作”? - 是的“合理工作” - 取决于。 “无缝地工作” - 不是那么多。
JPA是一种固有的关系API,因此请准备好迎接这些方面:
transaction.rollback()
,应该会发生什么?严格地说,你无法实现JPA 100%(按照定义),并且大多数自称为NoSQL的JPA实现基本上都提供了JPA的一小部分:一些用于映射的注释,一些EntityManager
API。虽然我可以看到将熟悉的API放在新事物上以获得某种知识转移的动机,但最终认为如果目标空间不支持关键方面(例如交易),这是一个谬论。到目前为止,我所看到的所有方法最终都花费了很大一部分文档来记录JPA和商店方面都不支持的内容。
也就是说,还有其他方法摆脱“一个API来统治它们”并主动利用NoSQL空间的多样性(想一想:一组技术由它们定义的不是根据定义,em>会非常多样化。
Spring Data project(免责声明:我是其中的领导者)正在提升一个抽象层次,而是提供一个统一的存储库编程模型,而不是一个统一API。这允许仍然提供对商店特定功能的支持,但一般使用方法保持不变。
所以我建议转到专门的Spring Data MongoDB项目。
答案 1 :(得分:1)
你应该可以用一点点工作来换掉它们。以下是Spring.io网站的示例指南:Accessing Data with MongoDB
您将使用Mongo存储库而不是使用JPA存储库......示例应该足以让您了解。
答案 2 :(得分:1)
EclipseLink扩展了JPA以支持MongoDB:https://wiki.eclipse.org/EclipseLink/Examples/JPA/NoSQL
答案 3 :(得分:1)
是的,DataNucleus JPA允许它以及许多其他数据库。您可以通过将JPA API用于其他类型的数据存储来做出妥协,但是可以轻松地对其进行调查。