java – 在同一个应用程序上下文中启用两个Spring Data存储库(neo4j和h2)

我似乎无法让SDN(最新快照)与Spring Data JPA(H2)一起发挥得很好.我不需要跨两个数据存储的跨域支持;相反,我的愿望就是在同一个类中为两个商店简单地使用存储库.例如

public MySpringControlledClass{

   @Autowired
   private MyNeo4jBasedRepository myNeo4jBasedRepository;

   @Autowired
   private MyH2BasedRepository myH2BasedRepoistory;
   ...
}

当我启用neo4j和JPA时,我得到了一个表单的例外

Caused by:
org.springframework.beans.factory.UnsatisfiedDependencyException:
Error creating bean with name ‘myNeo4jBasedRepository’: Unsatisfied
dependency expressed through method ‘setMappingContext’ parameter 0;
nested exception is
org.springframework.beans.factory.NoUniqueBeanDefinitionException: No
qualifying bean of type
[org.springframework.data.mapping.context.MappingContext] is defined:
expected single matching bean but found 2:
neo4jMappingContext,jpaMappingContext

这是预期的,因为我现在有两个映射上下文,一个由SDN隐式创建,一个在我的配置中为spring数据JPA显式创建.

虽然我在spring数据jpa中找到了描述如何使用两个不同数据库执行此操作的帖子,但我还没有找到如何使用SDN和Spring数据JPA存储(如H2)的示例.差异似乎是SDN隐藏了开发人员的一些boilderplate逻辑.

任何帮助都会非常感激,因为我花了很多时间尝试各种各样的事情,到目前为止还没有任何成果.

非常感谢!

解决方法:

因此,在myNeo4jBasedRepository中有一个自动连接的setMappingContext方法,它不知道是否使用neo4jMappingContext或jpaMappingContext,因为这两个bean都具有与依赖项相同的类型.

我不确定有多少暴露给你,但如果可能的话,你的MyNeo4jBasedRepository覆盖你的setMappingContext方法,取一个neo4jMappingContext bean类型的类型来让它选择这个.

或者将setMappingContext方法覆盖为super.setMappingContext,并在顶部放置限定符@Qualifier(“neo4jMappingContext”):

@Autowired
@Qualifier("neo4jMappingContext")
public void setMappingContext(TODO todo)
{
  //super.setMappingContext(todo) Sample implementation as before
}

这将确保Spring选择正确的依赖项.

上一篇:Neo4j JavaScript驱动程序(bolt)通过id无法工作的Cypher查询=>错误:期望的实体id是一个整数值


下一篇:Neo4j数据库学习一:安装和数据类型常用命令简介