我似乎无法让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选择正确的依赖项.