首页 > 解决方案 > Neo4j - Infinispan 组合

问题描述

我们的项目使用 Neo4j 作为长期数据存储。

我们有一个用例来使用数据网格将 Neo4j 从冗余查询中解脱出来,能够直接在 RAM 中进行查询,并在内存中的某些数据发生更改时得到通知。为此,我们已经看到 Infinispan 非常有趣。

最重要的是,我们已经看到 Hibernate OGM 可以同时支持 Infinispan 和 Neo4j 数据存储。

是否可以使用相同的数据模型通过 Hibernate OGM 将我们的 pojos 映射到 Neo4j 和 Infinispan?

标签: javaneo4jinfinispanhibernate-ogm

解决方案


是的,如果您创建两个不同的工厂。

如果您坚持使用 JPA,则可以在两个持久性单元配置中使用相同的实体类,但您将无法使用单个工厂同时处理两个数据存储。

这是一个简单的示例,取自我们在存储库中的一个测试,它为 Hibernate ORM 创建一个实体管理器,为 Hibernate OGM 创建一个实体管理器:

<persistence xmlns="http://java.sun.com/xml/ns/persistence"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
         version="2.0">

  <persistence-unit name="ogm" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.ogm.jpa.HibernateOgmPersistence</provider>
  </persistence-unit>

  <persistence-unit name="no-ogm" transaction-type="RESOURCE_LOCAL">
    <properties>
      <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>
    </properties>
  </persistence-unit>

</persistence>

您需要为您的用例设置正确的属性。

您可以使用以下方法获得正确的工厂:

EntityManagerFactory emf = Persistence.createEntityManagerFactory( "ogm" );

您也可以对注释执行类似的操作。


推荐阅读