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

时间:2015-05-20 11:21:39

标签: spring hibernate maven spring-data-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$1.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

任何人都可以帮忙吗

1 个答案:

答案 0 :(得分:1)

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

NOTE: Only applied if no external PersistenceUnitManager specified.

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