我们应该在java for Mongodb中使用像hibernate这样的OGM / ORM吗?

时间:2015-11-03 04:49:49

标签: java mongodb hibernate hibernate-ogm

最近,我开始研究mongo。由于mongodb的整个概念是无模式和面向文档的,我如何将关系转换为实体?

我在java中使用了hibernate ORM来将对象映射到表。有没有必要为mongodb做同样的事情?

限制我使用OGM的事情:

  1. 一旦将Java实体映射到mongo中的集合,mongo无模式的概念是否仍然有效。在这种情况下,我必须将成员变量映射到该集合的键。此外,如果mongo集合应该包含嵌套对象或对象数组,那么呢?

  2. Hibernate最近(2015年1月)为NoSQL数据库推出了OGM

  3. 有人可以帮我决定选择OGM for mongo吗?

2 个答案:

答案 0 :(得分:2)

当然,ORM易于使用,其中许多允许我们使用SQL或JPQL以类似于RDBMS的方式进行查询,但是ORM有自己的限制,是的,它们也会增加一些开销(就其而言)表现)。这就是首选使用Native MongoDB Java Driver的原因。

对于NOSQL数据库,选择ORM完全取决于用例。 ORM会将您的表(在MongoDB 的情况下为 Collection)映射到实体对象。您添加了,您可以在实体中保留一个地图,这将使您的设计变得有点无模式。大多数情况下,我们的数据几乎都是结构化的,因此可以使用ORM。但是,如果您拥有完全通用且非结构化的数据,请使用Java Driver。检查Mongo's documentation

此外,还有其他稳定的ORM工具,例如KunderaSpring Data。你应该探索它们。

PS:

  • 这个答案适用于ORMs vs本机驱动程序,不适用于Hibernate ORM
  • 我是Kundera开发者

答案 1 :(得分:0)

我会推荐像Tinkerpop这样的OGM框架,或者如果你需要更高级别的东西并且更像Hibernate,那么请考虑Ferma。 Ferma位于Tinkerpop之上,使用注释来定义类似于JPA和Hibernate中的Entity的Java类。不同之处在于Ferma和Tinkerpop是专为图形数据库而构建的,而不是试图将其填充到为传统关系数据库设计的框架中。

Ferma和Tinkerpop的一个不错的功能是,虽然为图形数据库构建,但它们仍可用于关系数据库。 Tinkerpop有几个驱动程序允许它几乎可以在市场上的每个主要图形数据库和关系数据库上工作。它还可以使用Tinkerpop中本机存在的内存驱动程序,因此根本不需要任何数据库支持。它是一个非常灵活的平台,在模块化和灵活的代码方面具有很多优势。

以下是对Ferma项目的描述。

  

Ferma项目最初是作为替代品而创建的   TinkerPop2框架项目。当时缺乏所需的功能   社区,其表现非常缓慢。今天Ferma   是一个强大的框架,承担类似于一个角色   传统数据库的对象关系模型(ORM)库。费尔马   通常被称为对象图模型(OGM)库和映射   Java对象是图形中的元素,例如“顶点”或“边”。在   简而言之,它允许使用java接口定义模式   提供与...交互的抽象级别的类   基础图。

还有Tinkerpop项目的描述。

  

Apache TinkerPop™是两种图形的图形计算框架   数据库(OLTP)和图分析系统(OLAP)。

注意:我是Ferma的作者之一。