我有两个Entitymanager
bean配置,每个都指向一个不同模式的单独数据库(一个是Oracle,另一个是内存中的H2)。
我该怎么解决每个Repository使用哪个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" 中。 按照 如何创建自定义Repository 的模板,我创建了两个接口'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
}
}
导致以下错误信息:
Caused by: org.springframework.beans.factory.BeanCreationException: 创建名为 'aRepositoryImpl' 的bean时出错:注入持久性依赖项失败;嵌套异常是 org.springframework.beans.factory.NoSuchBeanDefinitionException: 没有定义类型为 [javax.persistence.EntityManagerFactory] 的唯一bean:期望单个bean但找到2个
这当然是正确的,存在两个EM bean,但由于我将 EM#1(即'entityManagerFactory')限制为仅适用于包 'com.foo.repos.ora',因此我仍然不确定如何引用确切的EM bean。
LocalContainerEntityManagerFactoryBean
,每个都有自己的persistenceUnitName
,那么2b)也可以完美运行。 - Emil Lundberg