【发布时间】:2013-05-09 03:24:06
【问题描述】:
我有两个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”中 按照how to make a custom 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
}
}
导致以下错误消息:
引起: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 豆。
【问题讨论】:
标签: entitymanager spring-data-jpa multiple-databases