Hibernate + Spring - 找不到xml映射

时间:2011-11-06 15:09:26

标签: java hibernate spring orm

我的应用程序简单,具有以下文件夹结构:

  • ProjFolder
  • | ----- SRC
  • | ----------包名
  • | --------------- {sourcefiles}
  • | ---------- META-INF
  • | --------------- {的beans.xml}
  • | --------------- {的hibernate.cfg.xml}
  • | --------------- {EntityMapping.hbm.xml}

这是beans.xml Spring配置文件的一部分:

<bean id="propertyConfigurer"  class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="location" value="classpath:./META-INF/jdbc.properties" />
</bean>

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="${jdbc.driverClassName}" />
    <property name="url" value="${jdbc.url}" />
    <property name="username" value="${jdbc.username}" />
    <property name="password" value="${jdbc.password}" />
</bean>

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="configLocation" value="classpath:./META-INF/hibernate.cfg.xml" />
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">${hibernate.dialect}</prop>
        </props>
    </property>

    <property name="mappingResources">
<list>
      <value>classpath:./META-INF/EntityMapping.hbm.xml</value>
</list>
 </property>
</bean>

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

<bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory" />
</bean>

当我开始我的单元测试时,我得到以下异常:

  

org.springframework.beans.factory.BeanCreationException:错误   在类路径资源中定义名为'wrapperClass'的bean   [META-INF / beans.xml]:无法解析对bean'wrapperClassField'的引用   设置构造函数参数时;嵌套异常是   org.springframework.beans.factory.BeanCreationException:错误   创建在类路径资源中定义的名为“xmlBooksource”的bean   [META-INF / beans.xml]:无法解析对bean的引用   设置bean属性'sessionFactory'时'sessionFactory';嵌套   异常是org.springframework.beans.factory.BeanCreationException:   在类路径中定义名为'sessionFactory'的bean时出错   resource [META-INF / beans.xml]:调用init方法失败;   嵌套异常是java.io.FileNotFoundException:类路径资源   [classpath:/META-INF/EntityMapping.hbm.xml]无法打开,因为它不存在

当我输入

时会抛出相同的异常
<property name="mappingResources">
<list>
      <value>EntityMapping.hbm.xml</value>
</list>
 </property>

为什么spring无法找到此文件以及我必须如何填充其位置才能使此代码生效?

提前致谢。

3 个答案:

答案 0 :(得分:3)

您是否尝试删除classpath:前缀?在查看Hibernate代码时,mappingResources setter期望将字符串传递给new ClassPathResource(String)。这需要类路径资源。然后该字符串将传递给ClassLoader.getResourceAsStream(String)。这些代码都不会从资源字符串的前面删除“classpath:”前缀。

答案 1 :(得分:0)

我不确定错误消息是否与您发布的beans.xml内容一致。 你有错误

[classpath:/META-INF/EntityMapping.hbm.xml]

不一样
 classpath:./META-INF/EntityMapping.hbm.xml

注意缺少的“。”在错误的开头。

第二个beans.xml配置应该产生一个不同的错误消息:

[classpath:EntityMapping.hbm.xml]

这将在您编译的应用程序的根目录中搜索文件(jar,war,爆炸,你有什么)。

答案 2 :(得分:0)

我已经使用Spring 3.1成功配置了Hibernate 4。我的applicationContext.xml文件位于web-inf文件夹中,并具有以下hibernate配置:

<!-- Session Factory Declaration -->
 <bean id="SessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
  <property name="dataSource" ref="DataSource" />
  <!--  
  <property name="annotatedClasses">
   <list>
    <value>iltaf.models.Levels</value>
   </list>
  </property>
  -->

    <property name="mappingLocations" value="classpath:iltaf/models/*.hbm.xml" />


    <property name="configLocation">
        <value>classpath:hibernate.cfg.xml</value>
    </property>

  <property name="hibernateProperties">
   <props>
    <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
    <prop key="hibernate.show_sql">true</prop>
   </props>
  </property>
 </bean>

 <!-- Enable the configuration of transactional behavior based on annotations -->
    <tx:annotation-driven transaction-manager="txManager"/>

 <!-- Transaction Manager is defined -->
    <bean id="txManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
       <property name="sessionFactory" ref="SessionFactory"/>
    </bean>

</beans>

我在src文件夹中有单独的hibernate.cfg.xml文件。我正在使用Eclipse Juno Java EE版本。

相关问题