spring - hibernate load *.hbm.xml from classpath resource

后端 未结 5 557
野的像风
野的像风 2021-01-19 15:04

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 followin

相关标签:
5条回答
  • 2021-01-19 15:22

    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.

    0 讨论(0)
  • 2021-01-19 15:37
    @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;
    }
    
    0 讨论(0)
  • 2021-01-19 15:39

    If you are loading your Spring application context from a webapp, you might see an error like this:

    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
    

    The solution is to explicitly tell Spring to load the configuration from the classpath like so:

    classpath:mypath/myfile.xml
    
    0 讨论(0)
  • 2021-01-19 15:41

    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>
    
    0 讨论(0)
  • 2021-01-19 15:42

    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>
    
    0 讨论(0)
提交回复
热议问题