我有两个Entitymanager
bean 配置。每个都指向具有不同架构的单独数据库(一个是 Oracle,另一个是内存中 H2)
我能做些什么来解决每个存储库应该使用什么 Entitymanager 的歧义?现在我收到这个错误:
No unique bean of type [javax.persistence.EntityManagerFactory] is defined:
expected single bean but found 2
我想我可以通过使用类似的东西来提供快速修复
<jpa:repositories base-package="com.foo.repos.ora"
entity-manager-factory-ref="entityManagerFactoryA">
<jpa:repositories base-package="com.foo.repos.m2"
entity-manager-factory-ref="entityManagerFactoryB">
但希望有更好的解决方案。
编辑:
我给你一个当前场景的想法:
Spring-Config:有两个 EM
<jpa:repositories base-package="com.foo.repos.ora" entity-manager-factory-ref="entityManagerFactory"/>
<jpa:repositories base-package="com.foo.repos.m2" entity-manager-factory-ref="entityManagerFactory2"/>
<context:component-scan base-package="com.foo" /> ....
从这里开始的所有内容都在“package com.foo.repos.ora”中按照如何制作自定义存储库的模式,我得到了两个接口“ARepository”、“ARepositoryCustom”及其实现“ARepositoryImpl”,就像这样
@Repository
public interface ARepository extends ARepositoryCustom, JpaRepository<myEntity, BigDecimal>, QueryDslPredicateExecutor {
}
public interface ARepositoryCustom {
FooBar lookupFooBar()
}
public class ARepositoryImpl extends QueryDslRepositorySupport implements ARepositoryCustom {
ARepositoryImpl(Class<?> domainClass) {
super(domainClass.class)
}
ARepositoryImpl() {
this(myEntity.class)
}
@Override
FooBar lookupFooBar() {
JPQLQuery query = ....
....
return found
}
}
导致以下错误消息:
原因:org.springframework.beans.factory.BeanCreationException:创建名为“ aRepositoryImpl ”的bean时出错:注入持久性依赖项失败;嵌套异常是 org.springframework.beans.factory.NoSuchBeanDefinitionException:没有定义类型 [javax.persistence.EntityManagerFactory] 的唯一 bean:预期单个 bean 但找到 2
这当然是正确的,有 2 个 EM bean,但是由于我将 EM #1 aka 'entityManagerFactory' 限制为仅打包 'com.foo.repos.ora',我仍然不确定如何引用确切的 EM bean。