今天是一个大日子。Hibernate OGM的第一个最终发布版本。绝对不要被4.1这个数字所迷惑。Hibernate OGM是一个用于各种NoSQL存储的对象映射器,并提供熟悉的JPA API。这个最终版本为MongoDB、Neo4J、Infinispan和Ehcache提供了映射。
达到这个发布版本的路程漫长,比我们想象的要长得多。我们还有很长的路要走来实现我们的完整(令人兴奋!)愿景。但今天是我们庆祝的时刻:下载这个版本并尝试使用它。
什么是Hibernate OGM?
Hibernate OGM是一个对象映射器。它将对象图持久化到您的NoSQL数据存储中。
我们非常关注以最自然的方式映射对象结构;我们考虑了我们支持的所有NoSQL存储的最佳实践。在文档存储中存储关联与在图数据库中存储相同的关联大不相同。
// Unidirectional one to many association // Basket { "_id" : "davide_basket", "owner" : "Davide", "products" : [ "Beer", "Pretzel" ] } // Products { "_id" : "Pretzel", "description" : "Glutino Pretzel Sticks" } { "_id" : "Beer", "description" : "Tactical nuclear penguin" }
Hibernate OGM是90%的Hibernate ORM。我们更改了特定于SQL和JDBC的部分,但大部分引擎保持不变。同样的力量,同样的灵活性。
API是什么样的?
非常简单。它是JPA。或者Hibernate ORM。使用JPA注解(或XML)映射您的实体,然后使用JPA或Hibernate原生API来操作您的对象。
@PersistenceContext EntityManager em;
// the transaction boundary is really here to express the flush time
@Transactional
public void createSomeUser() {
Employer redHat =
em.createQuery("from Employer e where e.name = :name")
.setParamater("name", "Red Hat")
.getSingleResult();
User emmanuel = new User("Emmanuel", "Bernard");
user.setTwitterHandle("emmanuelbernard");
user.setEmployer(redHat);
em.persist(user);
}
我们的目标是让熟悉JPA或Hibernate ORM的人能够无障碍地使用NoSQL对象映射器。
Hibernate OGM还有一个灵活的选项系统,允许您自定义一些NoSQL存储特定的或映射选项。例如,这个实体的MongoDB写入关心是什么(请参见代码示例)或者关联应该存储在拥有实体文档中。
@Entity
@WriteConcern(JOURNALED) // MongoDB write concern
public class User {
...
}
那么查询呢?
不提JP-QL,我们无法谈论JPA。在许多层面上提供JP-QL支持都是一项挑战。仅举两例,连接通常不存在于NoSQL中,每个存储都有非常不同的查询能力。
Hibernate OGM可以将JP-QL查询转换为数据存储的底层原生查询语言。然而,这个功能仍然有限。除了某些查询永远不会映射到JP-QL之外。因此,我们还允许您编写特定于您NoSQL存储的原生查询,并将结果映射到托管实体。
// native query using CypherQL
String query = "MATCH ( n:Poem { name:'Portia', author:'Oscar Wilde' } ) RETURN n";
Poem poem = (Poem) em.createNativeQuery( query, Poem.class ).getSingleResult();
在哪里可以使用Hibernate OGM?
它可以在Hibernate ORM或任何JPA提供者工作的任何地方工作。Java SE、Java EE,都应该没问题。但我们确实需要JPA 2.1。如果您使用WildFly(8.2),我们有一个专门的模块使事情变得更加容易。
针对哪些NoSQL存储?
MongoDB、Neo4J、Infinispan和Ehcache是我们认为稳定的存储。我们正在努力开发CouchDB和Cassandra。但事实上,任何有激情的人都可以尝试映射其他NoSQL存储:这就是一些人是如何开始的。我们有一个API,到目前为止已经证明足够灵活。
Hibernate OGM可以做X、Y、Z吗?
可能。也许不行。
最好的办法是在我们的论坛上与我们交谈,检查我们的文档(我们在这方面花费了大量时间),并简单地试一试。
一般来说,映射支持是完整的。与我们的目标相比,我们的查询支持仍然有点有限。现在有了这些基础,它将很快得到改善。
我们想知道您从Hibernate OGM中需要什么,您缺少哪些功能,哪些应该被改变。请到我们的论坛或您能找到我们的任何地方与我们交谈。
如何开始?
您需要的绝大部分信息都可以在我们的网站上找到。有一个入门指南,以及更完整的参考文档。获取完整的Hibernate OGM 发行版。最后但同样重要的是,如果您需要任何帮助,请通过我们的论坛联系我们。
提及为Hibernate OGM做出贡献以及如何贡献的个人和方式是不可能的:对话、支持、代码、文档、启动新的数据存储提供者……非常感谢大家使这一切成为现实。
我们还没有完成,远未完成。我们有很多想法,想要把Hibernate OGM带到哪里。这是另一天的讨论。