我目前正在尝试使用Spring Data JPA来处理两个DataSource,从而使用两个EntityManagers . 我的存储库都继承自定义基类“BaseRepositoryImpl” .
Problem: 我总是得到以下异常:
org.springframework.beans.factory.NoSuchBeanDefinitionException:
No unique bean of type [javax.persistence.EntityManagerFactory] is defined:
expected single bean but found 2: entityManagerFactory1,entityManagerFactory2
Question: 如何告诉我的自定义RepositoryFactory使用哪个EntityManagerFactory?
这是我的Spring配置:
<jpa:repositories base-package="package1" transaction-manager-ref="..."
factory-class="MyFactoryBean"
entity-manager-factory-ref="entityManagerFactory1"/>
<bean id="dataSource1" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="..." />
</bean>
<bean id="entityManagerFactory1" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource1" />
<property name="persistenceUnitName" value="unit1" />
...
</bean>
<jpa:repositories base-package="package2" transaction-manager-ref="..."
factory-class="MyFactoryBean"
entity-manager-factory-ref="entityManagerFactory2"/>
<bean id="dataSource2" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="..." />
</bean>
<bean id="entityManagerFactory2" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource2" />
<property name="persistenceUnitName" value="unit2" />
...
</bean>
类"MyFactoryBean"的实现与http://docs.spring.io/spring-data/jpa/docs/1.4.x/reference/htmlsingle/#repositories.custom-behaviour-for-all-repositories中描述的完全相同 .
Spring似乎忽略了配置“entity-manager-factory-ref”,至少在使用自定义RepositoryFactory时 .
任何提示?
1 回答
实体管理器工厂用于为不同的持久性单元创建实体管理器 . 您声明实体管理器bean,然后将实体管理器工厂bean作为其类 .
这对我有用:
然后,当您实现数据访问类时,只需声明:
对于使用其他持久性单元的DAO: