Наш проект использует Neo4j в качестве долгосрочного хранилища данных.
У нас есть вариант использования, чтобы использовать сетку данных, чтобы избавить Neo4j от избыточных запросов, иметь возможность выполнять запросы непосредственно в ОЗУ и получать уведомления при изменении некоторых данных в памяти. В связи с этим мы убедились, что Infinispan очень интересен.
Вдобавок мы увидели, что Hibernate OGM может поддерживать хранилища данных Infinispan и Neo4j.
Можно ли использовать одну и ту же модель данных для сопоставления наших pojos как Neo4j, так и Infinispan с Hibernate 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" );
Вы можете сделать что-то подобное и с аннотациями.