spring 没有从 {classpath*:META-INF/persistence.xml} 解析出持久性单元

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/11651919/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-08 05:16:35  来源:igfitidea点击:

No persistence units parsed from {classpath*:META-INF/persistence.xml}

springpersistence

提问by cchris

Using Spring Core 3.0.5, Hibernate 3.6.0. The title of this question is the message of a java.lang.IllegalStateException raised on starting a Tomcat webserver (6.0.29) with an application I am maintaining.

使用 Spring Core 3.0.5,Hibernate 3.6.0。这个问题的标题是在使用我正在维护的应用程序启动 Tomcat Web 服务器 (6.0.29) 时引发的 java.lang.IllegalStateException 的消息。

applicationContext.xml says:

applicationContext.xml 说:

<bean id="emf" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" scope="singleton">
   <property name="jpaVendorAdapter">
     <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" />
  </property>
</bean>

persistence.xml is in the META-INF directory of a jar file the project includes. Expedissimo.web.war has a WEB-INF/classes folder with said .jar.

persistence.xml 位于项目包含的 jar 文件的 META-INF 目录中。Expedissimo.web.war 有一个包含 .jar 的 WEB-INF/classes 文件夹。

The complete exception traceback on starting the server is:

启动服务器的完整异常回溯是:

GRAVE: Exception lors de l'envoi de l'évènement contexte initialisé (context initialized) à l'instance de classe d'écoute (listener) org.springframework.web.context.ContextLoaderListener org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'emf' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Invocation of init method failed; nested exception is java.lang.IllegalStateException: No persistence units parsed from {classpath*:META-INF/persistence.xml} at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1420) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:563) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:895) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:425) at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:276) at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:197) at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:47) at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4135) at org.apache.catalina.core.StandardContext.start(StandardContext.java:4630) at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791) at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:546) at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:637) at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:563) at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:498) at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1277) at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:321) at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053) at org.apache.catalina.core.StandardHost.start(StandardHost.java:785) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045) at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:445) at org.apache.catalina.core.StandardService.start(StandardService.java:519) at org.apache.catalina.core.StandardServer.start(StandardServer.java:710) at org.apache.catalina.startup.Catalina.start(Catalina.java:581) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414) Caused by: java.lang.IllegalStateException: No persistence units parsed from {classpath*:META-INF/persistence.xml} at org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager.obtainDefaultPersistenceUnitInfo(DefaultPersistenceUnitManager.java:373) at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.determinePersistenceUnitInfo(LocalContainerEntityManagerFactoryBean.java:247) at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:196) at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:308) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1477) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1417)

GRAVE: Exception lors de l'envoi de l'évènement contexte initialisé (context initialized)à l'instance de classe d'écoute (listener) org.springframework.web.context.ContextLoaderListener org.springframework.beans.factory.BeanCreationException:错误在 ServletContext 资源 [/WEB-INF/applicationContext.xml] 中定义名称为“emf”的 bean:调用 init 方法失败;嵌套异常是 java.lang.IllegalStateException: Nopersistence unit parsed from {classpath*:META-INF/persistence.xml} at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1420) at org. springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) 在 org。

... 36 more

persistence.xml says:

持久性.xml 说:

<persistence xmlns="http://java.sun.com/xml/ns/persistence"     xmlns:xsi="http://www.w3.org    /2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" version="2.0">
<persistence-unit name="serv2010pool" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider> 
    <properties>
        <property name="hibernate.show_sql" value="false" /> 
        <property name="hibernate.format_sql" value="true" /> 
        <property name="use_sql_comments" value="true" /> 
        <property name="hibernate.autocommit" value="false" /> 
        <property name="javax.persistence.jdbc.driver"     value="oracle.jdbc.OracleDriver"/>
        <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect"/>
        <property name="hibernate.connection.insee.poolName" value="serv2010pool" />
        <property name="hibernate.connection.provider_class" value=
            "fr.insee.config.hibernate.InseeConnectionProvider"/>           
    </properties>
</persistence-unit>

The same persistence unit descriptor, when used outside Spring in the batch sibling project, is found and parsed correctly from

相同的持久性单元描述符,当在批处理同级项目中的 Spring 之外使用时,可以从以下位置找到并正确解析

    emf = Persistence.createEntityManagerFactory("serv2010pool");

The batch project, just like the web project, includes Serv2010-1.0.jar, which has META-INF/persistence.xml . All annotated classes are in this common jar.

批处理项目,就像 web 项目一样,包括 Serv2010-1.0.jar,它有 META-INF/persistence.xml 。所有带注释的类都在这个公共 jar 中。

Deploying inside Eclipse v3.6 raises the exception. The WEB-INF/classes/ folder in the .war doesn't have the persistence.xml file. Adding it manually and restarting the server doesn't help.

在 Eclipse v3.6 中部署会引发异常。.war 中的 WEB-INF/classes/ 文件夹没有 persistence.xml 文件。手动添加它并重新启动服务器无济于事。

Any idea? I'm running out of tricks here, thanks for providing any. CChris

任何的想法?我在这里用完了技巧,感谢您提供任何技巧。克里斯

回答by Templar

This usually means that Spring can't find persistence.xml. Make sure that persistence.xml is in META-INF in relation to your classpath. This might mean you have to put the file in WEB-INF\classes\META-INF, even though it seems strange.

这通常意味着 Spring 找不到 persistence.xml。确保persistence.xml 位于与您的类路径相关的META-INF 中。这可能意味着您必须将文件放在 WEB-INF\classes\META-INF 中,即使它看起来很奇怪。

回答by Koitoer

If you are using Maven the META-INF folder should be placed within src/main/resources, once the file be there the problem is gone.

如果您使用的是 Maven,则 META-INF 文件夹应该放在 中src/main/resources,一旦文件在那里,问题就消失了。

回答by zhiwen zhang

Are you config packagesToScan property in entityManagerFactory bean?

您是否在 entityManagerFactory bean 中配置了 packagesToScan 属性?

回答by naman

Faced the same problem.But issue was resolved after adding "packagesToScan" property in entityFactoryManagerBean definition in spring.xml.

面临同样的问题。但在 spring.xml 的 entityFactoryManagerBean 定义中添加“packagesToScan”属性后问题得到解决。

回答by null

Just as an addition to the other answers:

就像对其他答案的补充:

I had the same problem and was also using maven. I had to do a fresh clean before the error dissipated. Might be obvious to some but someone else might find this useful. :)

我有同样的问题,也在使用 maven。在错误消失之前,我必须进行一次全新的清理。对某些人来说可能很明显,但其他人可能会发现这很有用。:)