我似乎无法让SDN(最新快照)与Spring Data JPA(H2)一起玩得很好。我不需要跨两个数据存储的跨域支持;相反,我的愿望就是在同一个类中为两个商店简单地使用存储库。例如
public MySpringControlledClass{
@Autowired
private MyNeo4jBasedRepository myNeo4jBasedRepository;
@Autowired
private MyH2BasedRepository myH2BasedRepoistory;
...
}
当我启用neo4j和JPA时,我得到了表单
的例外引起: org.springframework.beans.factory.UnsatisfiedDependencyException: 创建名为'myNeo4jBasedRepository'的bean时出错:不满意 通过方法'setMappingContext'参数0表示的依赖; 嵌套异常是 org.springframework.beans.factory.NoUniqueBeanDefinitionException:没有 合格的bean类型 定义了[org.springframework.data.mapping.context.MappingContext]: 预期单匹配bean但发现2: neo4jMappingContext,jpaMappingContext
这是预期的,因为我现在有两个映射上下文,一个由SDN隐式创建,一个在我的配置中为spring数据JPA显式创建。
虽然我在spring数据jpa中找到了描述如何使用两个不同数据库执行此操作的帖子,但我还没有找到如何使用SDN和Spring数据JPA存储(如H2)的示例。差异似乎是SDN隐藏了开发人员的一些boilderplate逻辑。
任何帮助都会非常感激,因为我花了很多时间尝试各种各样的事情,到目前为止还没有任何成果。
非常感谢!
答案 0 :(得分:3)
所以在你的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选择正确的依赖关系。
答案 1 :(得分:2)
已将错误修复推送到Spring Data Neo4j 4.2.0.BUILD-SNAPSHOT
,这意味着您不再需要使用@Qualifier
或在配置中定义MappingContext
bean。您只需要定义相应的PlatformTransactionManager
,然后通过@EnableXXXRepositories
属性将其与transactionManagerRef
相关联。
我在这里创建了一个项目来演示如何让两个Spring Data项目与Spring Boot一起工作:https://github.com/mangrish/spring-data-jpa-neo4j-with-boot。