【问题标题】:Hibernate + Spring - xml mapping not foundHibernate + Spring - 找不到xml映射
【发布时间】:2011-12-23 02:22:02
【问题描述】:

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

  • 项目文件夹
  • |-----src
  • |----------包名
  • |---------------{源文件}
  • |----------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 的引用 'sessionFactory' 同时设置 bean 属性 'sessionFactory';嵌套的 例外是 org.springframework.beans.factory.BeanCreationException: 在类路径中定义名称为“sessionFactory”的 bean 创建错误 资源 [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 找不到这个文件以及我必须如何填充它的位置才能使这个代码工作?

提前致谢。

【问题讨论】:

  • 正如我在问题开头所写的 - 是的。 META-INF 是 src 的子文件夹,所以我可以假设将它包含在 sourcepath 中不会解决问题
  • 对。您是否尝试过删除 classpath: 前缀?在查看代码时,该 setter 已经需要一个类路径资源。然后将字符串传递给ClassLoader.getResourceAsStream(String)
  • @Gray 谢谢!它解决了问题。

标签: java hibernate spring orm


【解决方案1】:

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

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

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

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

第二个 beans.xml 配置,可能会产生不同的错误消息:

[classpath:EntityMapping.hbm.xml]

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

【讨论】:

  • 路径中的前导点只是在错误消息中省略。我现在又试了一次。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    <!-- 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 版本。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-11
      • 2014-10-13
      • 2017-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-28
      • 2011-03-17
      相关资源
      最近更新 更多