我有兩個Entitymanager
bean配置。每個數據庫都指向一個具有不同模式的獨立數據庫(一個是Oracle,另一個是內存中的H2)Spring Data JPA:多個數據庫/ Entitymanger配置的存儲庫
我該怎麼做才能解決Entitymanager應該用於每個Repository的模糊性?現在,我得到這個錯誤:
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的配置:這裏有兩種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" /> ....
一切從這裏開始是「包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
}
}
導致以下錯誤消息:
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'aRepositoryImpl': Injection of persistence dependencies failed; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [javax.persistence.EntityManagerFactory] is defined: expected single bean but found 2
這當然是正確的,有2種EM豆類,但因爲我限制EM#1又名 '的entityManagerFactory' 打包「com.foo .repos.ora',我仍然不確定如何引用確切的EM bean。
2b)如果在應用程序上下文中有兩個'LocalContainerEntityManagerFactoryBean',每個都有它們自己的'persistenceUnitName',它也可以起到類似魅力的作用。 – 2013-08-13 13:23:13