Мне очень трудно использовать spring-data-neo4j
с neo4j 4.0.0. В этой версии Neo4j есть возможность переключаться между базами данных, и мне нужно это сделать, чтобы реализовать многопользовательскую систему, в которой каждый клиент имеет свою собственную базу данных.
Однако, spring-data-neo4j
, похоже, не дает возможности переключать базу данных во время выполнения с последней версией (это также должно быть потокобезопасным).
То, что я придумал, - это создать один sessionFactory
для каждого клиента, делая это
val sessionFactory = createTenantSessionFactory()
val session = sessionFactory.openSession()
val factory = Neo4jRepositoryFactory(session, mappingContext)
val repository = factory.getRepository(DesiredNeo4jRepository::class.java)
Однако с этим решением у меня возникают проблемы с параллелизмом, даже если запросы выполняются один после другого в одном потоке результат в базе данных окажется неверным.
Я понял, что это может быть связано с тем, что я не использую поддержку управления транзакциями, предлагаемую Spring с этим решением, потому что Neo4jTransactionManager
не создается.
Я понимаю, что это действительно сложный вопрос, но применил ли я хороший подход к решению проблемы или есть лучшая альтернатива, которую я не видел?
Если нет лучшего способа, как я могу поддержать управление транзакциями с помощью этого решения?
Спасибо за помощь!