Hibernate + Spring - отображение xml не найдено - PullRequest
1 голос
/ 06 ноября 2011

У меня есть простое приложение со следующей структурой папок:

  • ProjFolder
  • | ----- src
  • | ----------packagename
  • | --------------- {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'определено в ресурсе пути к классу [META-INF / beans.xml]: невозможно разрешить ссылку на bean-компонент' wrapperClassField 'при установке аргумента конструктора;вложенным исключением является org.springframework.beans.factory.BeanCreationException: ошибка при создании компонента с именем 'xmlBooksource', определенным в ресурсе пути к классу [META-INF / beans.xml]: невозможно разрешить ссылку на компонент "sessionFactory" при установке свойства компонента "sessionFactory"«;вложенное исключение - org.springframework.beans.factory.BeanCreationException: ошибка создания компонента с именем 'sessionFactory', определенным в ресурсе пути к классу [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 ]

3 голосов
/ 06 ноября 2011

Вы пытались удалить префикс classpath:? Рассматривая код Hibernate, установщик mappingResources ожидает, что строки передаются в new ClassPathResource(String). Это ожидает ресурсов classpath уже. Затем строка передается в ClassLoader.getResourceAsStream(String). Ни один из этого кода не будет удалять префикс "classpath:" с начала строки ресурса.

0 голосов
/ 21 февраля 2013

Я успешно настроил Hibernate 4 с Spring 3.1. Мой файл 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>

и у меня есть отдельный файл hibernate.cfg.xml внутри моей папки src. Я использую версию Eclipse Juno Java EE.

0 голосов
/ 06 ноября 2011

Я не уверен, что сообщение об ошибке согласуется с размещенным вами содержимым beans.xml. В ошибке у вас есть

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

что не совпадает с

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

Обратите внимание на пропущенное "." в начале ошибки.

Вторая конфигурация beans.xml, вероятно, должна выдать другое сообщение об ошибке:

[classpath:EntityMapping.hbm.xml]

Это будет поиск файла в корне вашего скомпилированного приложения (jar, war, exploded, что у вас).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...