views:

861

answers:

3

I have some hbm.xml files in classpath resource located in src/main/resources maven's folder. I used spring's LocalSessionFactoryBean to load these files with the following bean config:

<bean id="hibernateSessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
 <property name="dataSource" ref="dataSourceOracle"/>
 <property name="mappingResources">
  <list>
   <value>mapping/SystemUser.hbm.xml</value>
   <value>mapping/SystemCredential.hbm.xml</value>
   <value>mapping/SystemProvince.hbm.xml</value>
  </list>
 </property>
 <property name="hibernateProperties">
     <value>
      hibernate.dialect=org.hibernate.dialect.Oracle10gDialect
     </value>
    </property>
</bean>

But it gives me the FileNotFoundException. Please tell me what i've done wrong Thank you.

+1  A: 

This looks quite okay to me. Hence I don't think the problem is the config. I rather think the files simply aren't on the classpath. How did you start your application?

If you're using eclipse, make sure src/main/resources is used as source folder and resources are copied to target/classes.

sfussenegger
Yes, i have the default maven's src/main/resources as source folder and my app is a webapp. I've copied these files to web-inf/classes folder but it doesn't work
robinmag
When you say 'these files to web-inf/classes', do you mean e.g. `web-inf/classes/SystemUser.hbm.xml`? If yes, then you should move it to `web-inf/classes/mapping/SystemUser.hbm.xml`. I don't have any other idea right now.
sfussenegger
A: 

In web applications, when you write a resource path without prefix, Spring loads it from a context root (i.e., from a folder containing WEB-INF). To load resources from a classpath you should use "classpath:" prefix:

<value>classpath:mapping/SystemUser.hbm.xml</value>
axtavt
+3  A: 

Files located in src/main/resources end up in WEB-INF/classes when using Maven with a project of type war (and the resources directory structure is preserved). So either place your mapping files in src/main/resources/mapping or use the following configuration:

<bean id="hibernateSessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        <property name="dataSource" ref="dataSourceOracle"/>
        <property name="mappingResources">
                <list>
                        <value>SystemUser.hbm.xml</value>
                        <value>SystemCredential.hbm.xml</value>
                        <value>SystemProvince.hbm.xml</value>
                </list>
        </property>
        <property name="hibernateProperties">
        <value>
                hibernate.dialect=org.hibernate.dialect.Oracle10gDialect
        </value>
    </property>
</bean>
Pascal Thivent