【问题标题】:javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to resolve named mapping-file [hibernate.hbm.xml]javax.persistence.PersistenceException:[PersistenceUnit:默认] 无法解析命名映射文件 [hibernate.hbm.xml]
【发布时间】:2015-08-12 11:03:09
【问题描述】:

我需要将一个休眠映射资源文件添加到 Spring 上下文中。我不知道我该怎么做这些东西?

<context:annotation-config />
    <bean id="myEmf"
        class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="dataSource" ref="ProjectManagerDataSource" />
        <property name="packagesToScan" value="com.ads" />
        <property name="jpaVendorAdapter">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" />
        </property>
        <property name="jpaProperties">
            <props>
                <prop key="hibernate.hbm2ddl.auto">update</prop>
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
                <prop key="hibernate.show_sql">true</prop>

            </props>
        </property>
    </bean>
    <bean id="ProjectManagerDataSource"
        class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver" />
        <property name="url"
            value="jdbc:mysql://localhost:3306/project-management" />
        <property name="username" value="usera" />
        <property name="password" value="userausera" />
    </bean>

    <!-- <oxm:jaxb2-marshaller id="jaxbMarshallerBean"> -->
    <!-- <oxm:class-to-be-bound name="com.ads.configs.AppConfig" /> -->
    <!-- </oxm:jaxb2-marshaller> -->


    <jpa:repositories base-package="com.ads.dao"
        entity-manager-factory-ref="myEmf" />
    <tx:annotation-driven />
    <mvc:annotation-driven></mvc:annotation-driven>
    <context:component-scan base-package="com.ads.*" />
    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="myEmf" />
    </bean>

我已经使用 Session 工厂创建了一个解决方案,但由于我使用的是实体管理器工厂,所以它不适用于我的项目。

更新:我的新问题是发生了 javax.persistence.PersistenceException 这就是我的堆栈跟踪:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'myEmf' defined in ServletContext resource [/WEB-INF/rest-servlet.xml]: Invocation of init method failed; nested exception is javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to resolve named mapping-file [hibernate.hbm.xml]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1553)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:539)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:304)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:300)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:195)
    at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:973)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:750)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:482)
    at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:381)
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:293)
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:106)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4939)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5434)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
    at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
    at java.util.concurrent.FutureTask.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Caused by: javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to resolve named mapping-file [hibernate.hbm.xml]
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.persistenceException(EntityManagerFactoryBuilderImpl.java:1225)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.persistenceException(EntityManagerFactoryBuilderImpl.java:1221)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.buildMappingFileDescriptor(EntityManagerFactoryBuilderImpl.java:348)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.buildDeploymentResources(EntityManagerFactoryBuilderImpl.java:264)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.<init>(EntityManagerFactoryBuilderImpl.java:220)
    at org.hibernate.jpa.boot.spi.Bootstrap.getEntityManagerFactoryBuilder(Bootstrap.java:51)
    at org.hibernate.jpa.HibernatePersistenceProvider.getEntityManagerFactoryBuilder(HibernatePersistenceProvider.java:182)
    at org.hibernate.jpa.HibernatePersistenceProvider.getEntityManagerFactoryBuilder(HibernatePersistenceProvider.java:177)
    at org.hibernate.jpa.HibernatePersistenceProvider.createContainerEntityManagerFactory(HibernatePersistenceProvider.java:152)
    at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:67)
    at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:318)
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:318)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1612)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1549)

【问题讨论】:

标签: java spring hibernate jpa


【解决方案1】:

这意味着您的映射文件 orm.xml(如果使用 JPA)或 hbm.xml(如果使用 hibernate)不在部署存档中,或者它们位于错误的位置或在 persistence.xml 文件或文件名本身中错误地命名。

由于这些可能的原因,您的容器或运行时无法找到在 persistence.xml 文件中声明的所需文件。

根据部署存档类型,映射文件应位于 META-INF 或 WEB-INF 下。

在 persistence.xml 中为 JPA 声明如下:

/META-INF/jpa/Entity-orm.xml

将解决可能的目录相关问题。

假设 Entity-orm.xml 文件位于 /META-INF/jpa/ 目录下。

【讨论】:

    【解决方案2】:

    我只是将文件的位置更改为 src/main/resources 然后问题就解决了。

    【讨论】:

      【解决方案3】:

      到您的org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean bean 添加以下属性

      <property name="mappingResources">
                  <value>com/your/package/resources/*.hbm.xml</value>
              </property>
      

      【讨论】:

      • 我尝试了三种方式,但每次 javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to resolve named mapping-file 时都会发生异常
      • 可以分享详细的stacktrace吗?
      • 你的映射文件在项目结构中的什么位置?
      • /WEB-INF/hibernate.hbm.xml 我尝试将 mappingResources 属性的值更改为 /WEB-INF/hibernate.hbm.xml 但问题仍然存在。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-02-18
      • 1970-01-01
      • 1970-01-01
      • 2015-05-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多