getting error No qualifying bean of type [javax.persistence.EntityManagerFactory] is defined: expected single matching bean but found 2
I had the same issue today. Solved it doing the following:
First I've added the parameter unitName to @PersistenceContext to both entity manager properties:
@PersistenceContext(unitName="appPU")
@Qualifier(value = "appEntityManagerFactory")
private EntityManager appEntityManager;
@PersistenceContext(unitName="managerPU")
@Qualifier(value = "managerEntityManagerFactory")
private EntityManager managerEntityManager;
And in my configuration file I've added a property persistenceUnitName to my bean definitions:
<bean id="appEntityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource1" />
<property name="persistenceUnitName" value="appPU" />
<property name="packagesToScan" value="br.com.app.domain" />
...
</bean>
<bean id="managerEntityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource2" />
<property name="persistenceUnitName" value="managerPU" />
<property name="packagesToScan" value="br.com.app.domain" />
...
</bean>
Also I'd like to add once more useful comment: you need to extend the section in the 'web.xml' file of your web-app. Since now you have 2 Entity Managers, you need 2 OpenEntityManagerInViewFilters. Look the example:
<filter>
<filter-name>OpenEntityManagerInViewFilter1</filter-name>
<filter-class>org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter</filter-class>
<init-param>
<param-name>entityManagerFactoryBeanName</param-name>
<param-value>appEntityManagerFactory</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>OpenEntityManagerInViewFilter1</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>OpenEntityManagerInViewFilter2</filter-name>
<filter-class>org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter</filter-class>
<init-param>
<param-name>entityManagerFactoryBeanName</param-name>
<param-value>managerEntityManagerFactory</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>OpenEntityManagerInViewFilter2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Pay attention on fact the name 'appEntityManagerFactory' in < param-value >appEntityManagerFactory< / param-value > = 'appEntityManagerFactory' in < bean id="appEntityManagerFactory".
I also faced such problems and solved it. Please do the following to solve this error:
Add the following line to all your entity classes of both schema.
@PersistenceContext(unitName="<persistenceUnit>")
transient EntityManager entityManager;
<persistenceUnit>
is the name of the persistence unit you defined in the persistence.xml
file.