Hibernate OGM 已停止维护

生活中有时充满了惊喜。我可以说,当我得知 Hibernate OGM 入围今年的 Duke's Choice Award 时,我感到非常惊讶。

入围对我们来说是一项巨大的荣誉,所以向那些促成此事的人表示敬意!但获奖会更好;请访问 java.net 并为 Hibernate OGM 投票(登录页面右上角)。每一票都很重要,如果你曾经想为 Hibernate 做点什么,这就是你的机会!

Hibernate OGM - 它是什么以及为什么你应该为它投票?

简单来说,Hibernate OGM(对象/网格映射器)在你需要将 Java 领域模型持久化到 NoSQL 存储如 MongoDBInfinispanNeo4j 时,能给你带来内心的平静。它基于 JPA 的已知语义,并重用了经过验证的 Hibernate ORM 引擎的许多部分,为你提供了简单访问这个被称为 NoSQL 的新世界。

例如,考虑一个现有的基于 RDBMS 的地址管理应用程序,该应用程序应该增强某种“朋友关系图”。现在处理和查询图数据并不是 RDBMS/SQL 的专长。像 Neo4j 这样的专用图数据库在这方面做得更好。有了 Hibernate OGM 的帮助,你可以使用与整个应用程序中其他部分相同的持久化 API 来实现朋友关系图功能。但查询时,你可以选择使用 Neo4j 的强大原生查询,这些查询是用 Neo4j 的 Cypher 语言 编写的。

Hibernate OGM 的愿景是使应用程序能够利用对不同用例最有益的数据存储。需要深度嵌套的层次化数据?请使用 MongoDB。需要将数据分布到数百个节点并拥有卓越的性能?请使用 Infinispan。需要处理类似图的数据结构... 你可以想象到。但是,您不必使用特定数据存储的对象映射器,甚至不必退回到存储的原生低级 API,而是可以享受 Hibernate 引擎提供的舒适和强大功能。

真的,NoSQL 的 ORM 吗?!

当我们谈论这个愿景时,我们经常看到人们投来疑问的目光,似乎在问 但是 JPA/ORM 真的适合 NoSQL 吗?。坦白说,当我们开始这个项目时,我们也在问自己同样的问题。但是随着时间的推移,变得明显的是,OxM(其中 x 可以是 文档 等)的一般想法并不局限于关系型数据存储。

JPA 的许多逻辑概念——如何定义实体、它们的关联等——与 NoSQL 存储映射得很好,有时甚至可以说比 RDMBS 更好。仅举一个例子:@ElementCollection非常适合映射文档存储(如 MongoDB)中嵌套的依赖数据,然后可以通过简单的 get 访问,无需任何连接;您无需考虑获取策略、孤儿删除等。

Hibernate OGM 享有 Hibernate 框架及其生态系统所提供的许多特性。任何与 Hibernate 一起工作的解决方案都可以与 Hibernate OGM 一起工作,无需进一步操作。

您需要验证数据,但您的存储不支持检查约束或类似功能?没问题,只需将 Bean Validation 约束添加到您的模型中,并在持久化数据时自动验证它们。您的数据存储不提供足够的查询功能?让 Hibernate Search 帮助您。它通过 Apache Lucene 透明地索引您的数据,并允许执行返回管理实体的查询。如果您愿意,甚至可以通过 JP-QL 执行查询,JP-QL 将在实时转换为相应的 Lucene 查询。

当然,您选择某个存储是因为它具有特定的功能,而不是所有这些功能都可以通过 JPA 这样的高级抽象来暴露。Hibernate OGM 尽可能地避免干涉,例如,允许您使用存储的原生语法(例如 Neo4j 中的 Cypher)指定查询。此外,还可以通过注释或编程方式以一致和舒适的方式应用存储特定的选项。例如,您可以分别为您映射的每个实体配置 MongoDB 的写入关注和读取偏好设置。

所以,Hibernate OGM 是您在处理 NoSQL 时可能遇到的所有挑战的完美解决方案吗?

当然不是。

当处理需要持久化的明确定义的领域模型时,它将非常有用,但就像总是那样,总有某些情况下 OxM 工具可能不是最佳选择。

接下来是什么?

Hibernate OGM 项目自从开始以来已经走得很远。

所有基本的东西都准备好了,目前我们正在为下一个版本调整一些最后的细节。它将被推荐用于通用使用,并预计很快就会推出。我们正在修复支持网格方言的一些剩余问题,并验证所有 SPI 合同(您可以通过实现这些合同来添加对您最喜欢的 NoSQL 存储的支持)是否完整和正确。我们还在性能方面进行了一些观察。

在未来的版本中,您可以期待更多有用的功能,例如支持真正的多语言持久性(一个领域模型分布在几个数据存储中)、数据加载时的隐式数据迁移(对于无模式的存储)以及您数据的声明式去规范化(确保在不同用例中快速检索)。

你喜欢这一切吗?那么,别忘了在 java.net 为 Hibernate OGM 投上你的一票。请帮忙宣传这个项目,并请你的朋友也为它投票!如果你想了解更多,请查看我们的 参考文档。或者查看一个完整的 示例应用程序,该应用程序是为今年早些时候在 Red Hat Summit 的一个会议 构建的。


返回顶部