创建名为'entityManagerFactory'的bean时出错 - >无法解析类路径资源[META-INF / persistence.xml]中的持久性单元

时间:2013-07-23 20:00:48

标签: java spring web

我在j2e应用程序中遇到此问题,但找不到任何解决方案。 构建成功但存在抛出运行时异常。我尝试了谷歌的许多建议,但没有什么能解决我的问题。

SEVERE: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in ServletContext resource [/WEB-INF/datasource-config.xml]: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Cannot parse persistence unit from class path resource [META-INF/persistence.xml]

data-source

中的entityManagerFactory
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 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/tx http://www.springframework.org/schema/tx/spring-tx.xsd">


<bean id="dataSource" class="oracle.jdbc.pool.OracleDataSource" >
    <property name="connectionCachingEnabled" value="true" />
    <property name="URL" value="jdbc:postgresql://localhost:5432/postgres" />
    <property name="user" value="postgres" />
    <property name="password" value="" />
</bean>


<bean id="entityManagerFactory"
    class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="jpaVendorAdapter">
        <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
            <property name="showSql" value="true" />
            <property name="generateDdl" value="true" />
            <property name="databasePlatform" value="org.hibernate.dialect.PostgreSQLDialect" />
        </bean>
    </property>
    <property name="dataSource" ref="dataSource" />
    <property name="persistenceUnitName" value="default" />

    

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="dataSource" ref="dataSource" />
    <property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>

<tx:annotation-driven transaction-manager="transactionManager" />

<bean
    class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />

的persistence.xml

 <persistence-unit name="default" transaction-type="RESOURCE_LOCAL">

            <class>com.example.j2eeapp.domain.UserEntity</class>

    </persistence-unit>

3 个答案:

答案 0 :(得分:1)

首先,java编译器在编译期间不会验证persistence.xml的存在。该错误仅在运行时发生。

您获得的堆栈跟踪非常清楚,您的程序无法在类路径上找到persistence.xml。

jar中persistence.xml的位置必须是:META-INF / persistence.xml,或者如果它是war:WEB-INF / classes / META-INF / persistence.xml

答案 1 :(得分:0)

我有类似的问题,但在我的xml文件中,我有正确的persistence.xml路径。问题在于我的实体之间的关系是错误的。我也没有错误导入日期(我使用的是没有使用sql.Date的Spring Data JPA)

答案 2 :(得分:0)

1)请检查您的数据源类oracle.jdbc.pool.OracleDataSource

2)检查您的数据库详细信息 - 用户名,密码,驱动程序URL

如果上述细节是正确的。

3)在后端创建一个数据库并尝试引用它。并确保您的代码所引用的所有表和实体都存在。

4)清理tomcat(Web服务器)并尝试重新启动应用程序

我有同样的问题。使用上述步骤解决了它。 希望这会有所帮助!!!