spring - загрузка hibernate * .hbm.xml из ресурса classpath - PullRequest
4 голосов
/ 22 декабря 2009

У меня есть некоторые файлы hbm.xml в ресурсе classpath, расположенном в папке src / main / resources maven. Я использовал SpringSessionFactoryBean для загрузки этих файлов со следующей конфигурацией бина:

<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>

Но это дает мне исключение FileNotFoundException. Пожалуйста, скажите мне, что я сделал не так Спасибо.

Ответы [ 5 ]

4 голосов
/ 22 декабря 2009

Файлы, расположенные в src/main/resources, заканчиваются на WEB-INF/classes при использовании Maven с проектом типа war (и структура каталога resources сохраняется). Поэтому поместите файлы сопоставления в src/main/resources/mapping или используйте следующую конфигурацию:

<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>
1 голос
/ 28 апреля 2016
@Autowired
private ResourceLoader rl;


@Bean
public LocalSessionFactoryBean sessionFactory() throws IOException {
    LocalSessionFactoryBean sessionFactoryBean = new   LocalSessionFactoryBean();
    sessionFactoryBean.setMappingLocations(loadResources());
}

public Resource[] loadResources() {
    Resource[] resources = null;
    try {
        resources = ResourcePatternUtils.getResourcePatternResolver(rl)
                .getResources("classpath:/hibernate/*.hbm.xml");
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return resources;
}
1 голос
/ 22 декабря 2009

Это выглядит вполне нормально для меня. Следовательно, я не думаю, что проблема в конфиге. Я скорее думаю, что файлы просто не находятся на пути к классам. Как вы начали свое приложение?

Если вы используете eclipse, убедитесь, что src / main / resources используется как исходная папка, а ресурсы скопированы в target / classes.

0 голосов
/ 08 декабря 2016

Если вы загружаете контекст приложения Spring из веб-приложения, вы можете увидеть такую ​​ошибку:

SEVERE: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [applicationContext.xml]: Invocation of init method failed; nested exception is java.io.FileNotFoundException: ServletContext resource [/hibernate.cfg.xml] cannot be resolved to URL because it does not exist

Решением является явное указание Spring загрузить конфигурацию из пути к классам следующим образом:

classpath:mypath/myfile.xml
0 голосов
/ 22 декабря 2009

В веб-приложениях, когда вы пишете путь к ресурсу без префикса, Spring загружает его из корневого контекста (т. Е. Из папки, содержащей WEB-INF). Для загрузки ресурсов из пути к классам вы должны использовать префикс "classpath:":

<value>classpath:mapping/SystemUser.hbm.xml</value>
...