多个持久化单元抛出错误 没有发现持久化错误 Spring+JPA

Multiple persistence unit throwing error no persistence found error Spring+JPA

xml如下,它有多个持久化单元,好像只有一个就被认出来了。

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1"
 xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">

 <persistence-unit name="webApp-integration">
  <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
  <class>com.foo.webapp.integration.model.test.ItemMaster</class>
  <class>com.foo.webapp.integration.model.test.SupplierMaster</class>
  <exclude-unlisted-classes>true</exclude-unlisted-classes>
  <properties>
   <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect" />

   <!-- These options seem intended to be developers tools and not to facilitate 
    any production level databases -->
   <property name="hibernate.hbm2ddl.auto" value="update" />
   <property name="hibernate.show_sql" value="true" />
   <property name="hibernate.connection.charSet" value="UTF-8" />
   <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" />
   <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/webapp" />
   <property name="hibernate.connection.username" value="root" />
   <property name="hibernate.connection.password" value="password" />
  </properties>
 </persistence-unit>
  <persistence-unit name="M3tables">
  <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
  
  <class>com.foo.webapp.integration.model.m3.Mitmas</class>
  <exclude-unlisted-classes>true</exclude-unlisted-classes>
  <properties>
   <property name="hibernate.dialect" value="org.hibernate.dialect.DB2400Dialect" />

   <!-- These options seem intended to be developers tools and not to facilitate 
    any production level databases -->
   <property name="hibernate.hbm2ddl.auto" value="update" />
   <property name="hibernate.show_sql" value="true" />
   <property name="hibernate.connection.charSet" value="UTF-8" />
   <property name="hibernate.connection.driver_class" value="com.ibm.as400.access.AS400JDBCDriver" />
   <property name="hibernate.connection.url" value="jdbc:as400://xx.xx.x.xxx/schema" />
   <property name="hibernate.connection.username" value="username" />
   <property name="hibernate.connection.password" value="password" />
  </properties>
 </persistence-unit>
</persistence>

我还配置了application-context.xml如下

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
 xmlns:jdbc="http://www.springframework.org/schema/jdbc" xmlns:util="http://www.springframework.org/schema/util"
 xmlns:task="http://www.springframework.org/schema/task" xmlns:aop="http://www.springframework.org/schema/aop"
 xmlns:jpa="http://www.springframework.org/schema/data/jpa" xmlns:tx="http://www.springframework.org/schema/tx"
 xsi:schemaLocation="http://www.springframework.org/schema/beans 
  http://www.springframework.org/schema/beans/spring-beans.xsd
  http://www.springframework.org/schema/context 
  http://www.springframework.org/schema/context/spring-context-3.1.xsd
  http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc.xsd
  http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd
  http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd 
  http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
  http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.0.xsd
  http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd">


 <!-- JPA Repositories -->

 <!-- Default Persistence Unit Manager -->
 <bean id="webapp-persistence"
  class="org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager">
  <property name="persistenceXmlLocations">
   <list>
    <value>classpath*:META-INF/persistence.xml</value>
   </list>
  </property>
 </bean>

 <!-- Entity Manager for Persistance Unit -->
 <bean
  class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"
  id="entityManagerFactory2">
  <property name="persistenceUnitManager" ref="webapp-persistence" />
  <property name="persistenceUnitName" value="M3tables" />
  <property name="packagesToScan" value="com.foo.webapp.integration.model.m3" />
 </bean>
 
 <bean
  class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"
  id="entityManagerFactory1">
  <property name="persistenceUnitManager" ref="webapp-persistence" />
  <property name="persistenceUnitName" value="webApp-integration" />
  <property name="packagesToScan" value="com.foo.webapp.integration.model.test" />
 </bean>
 <!-- ##################################### -->


 <bean class="org.springframework.orm.jpa.JpaTransactionManager"
  id="transactionManager1">
  <property name="entityManagerFactory" ref="entityManagerFactory1" />
 </bean>
 <bean class="org.springframework.orm.jpa.JpaTransactionManager"
  id="transactionManager2">
  <property name="entityManagerFactory" ref="entityManagerFactory2" />
 </bean>
 <tx:annotation-driven mode="aspectj"
  transaction-manager="transactionManager1" />
 <tx:annotation-driven mode="aspectj"
  transaction-manager="transactionManager2" />

 <jpa:repositories base-package="com.foo.webapp.test.repository"
  entity-manager-factory-ref="entityManagerFactory1" />

 <jpa:repositories base-package="com.foo.webapp.repository"
  entity-manager-factory-ref="entityManagerFactory2" />

 <!-- JPA -end -->
</beans>

但是它抛出的异常如下

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory2' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: No persistence unit with name 'M3tables' found
 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1566) ~[spring-beans-4.1.3.RELEASE.jar:4.1.3.RELEASE]
 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:539) ~[spring-beans-4.1.3.RELEASE.jar:4.1.3.RELEASE]
 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476) ~[spring-beans-4.1.3.RELEASE.jar:4.1.3.RELEASE]
 at org.springframework.beans.factory.support.AbstractBeanFactory.getObject(AbstractBeanFactory.java:302) ~[spring-beans-4.1.3.RELEASE.jar:4.1.3.RELEASE]
 at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) ~[spring-beans-4.1.3.RELEASE.jar:4.1.3.RELEASE]
 at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) ~[spring-beans-4.1.3.RELEASE.jar:4.1.3.RELEASE]
 at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) ~[spring-beans-4.1.3.RELEASE.jar:4.1.3.RELEASE]
 at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:956) ~[spring-context-4.1.3.RELEASE.jar:4.1.3.RELEASE]
 at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:747) ~[spring-context-4.1.3.RELEASE.jar:4.1.3.RELEASE]
 at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:480) [spring-context-4.1.3.RELEASE.jar:4.1.3.RELEASE]
 at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:403) [spring-web-4.1.3.RELEASE.jar:4.1.3.RELEASE]
 at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:306) [spring-web-4.1.3.RELEASE.jar:4.1.3.RELEASE]
 at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:106) [spring-web-4.1.3.RELEASE.jar:4.1.3.RELEASE]
 at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:5016) [catalina.jar:7.0.61]
 at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5528) [catalina.jar:7.0.61]
 at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) [catalina.jar:7.0.61]
 at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1575) [catalina.jar:7.0.61]
 at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1565) [catalina.jar:7.0.61]
 at java.util.concurrent.FutureTask.run(FutureTask.java:262) [?:1.7.0_71]
 at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [?:1.7.0_71]
 at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [?:1.7.0_71]
 at java.lang.Thread.run(Thread.java:745) [?:1.7.0_71]
Caused by: java.lang.IllegalArgumentException: No persistence unit with name 'M3tables' found
 at org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager.obtainPersistenceUnitInfo(DefaultPersistenceUnitManager.java:685) ~[spring-orm-4.1.3.RELEASE.jar:4.1.3.RELEASE]
 at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.determinePersistenceUnitInfo(LocalContainerEntityManagerFactoryBean.java:362) ~[spring-orm-4.1.3.RELEASE.jar:4.1.3.RELEASE]
 at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:314) ~[spring-orm-4.1.3.RELEASE.jar:4.1.3.RELEASE]
 at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:318) ~[spring-orm-4.1.3.RELEASE.jar:4.1.3.RELEASE]
 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1625) ~[spring-beans-4.1.3.RELEASE.jar:4.1.3.RELEASE]
 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1562) ~[spring-beans-4.1.3.RELEASE.jar:4.1.3.RELEASE]
 ... 21 more

谁能帮忙解决这个问题

对 setPersistenceUnitName(String persistenceUnitName) 方法的评论说

NOTE: Only applied if no external PersistenceUnitManager specified.

尝试指定 'persistenceXmlLocation' 属性 而不是 'persistenceUnitManager'