복붙노트

[SPRING] spring - 클래스 패스 리소스에서 hibernate load * .hbm.xml

SPRING

spring - 클래스 패스 리소스에서 hibernate load * .hbm.xml

클래스 경로 리소스에 src / main / resources maven의 폴더에 hbm.xml 파일이 있습니다. 나는 Spring의 LocalSessionFactoryBean을 사용하여 다음 빈 설정으로이 파일들을로드했다.

<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을 준다. 내가 뭘 잘못했는지 말해줘. 고맙습니다.

해결법

  1. ==============================

    1.Maven을 war 형식의 프로젝트와 함께 사용할 때 src / main / resources에있는 파일들은 WEB-INF / classes에 끝납니다 (그리고 resources 디렉토리 구조는 보존됩니다). 따라서 매핑 파일을 src / main / resources / mapping에 넣거나 다음 구성을 사용하십시오 :

    Maven을 war 형식의 프로젝트와 함께 사용할 때 src / main / resources에있는 파일들은 WEB-INF / classes에 끝납니다 (그리고 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>
    
  2. ==============================

    2.이것은 나에게 꽤 좋아 보인다. 그러므로 나는 문제가 설정이라고 생각하지 않는다. 차라리 파일이 클래스 경로에 없다고 생각합니다. 신청서를 어떻게 시작 했습니까?

    이것은 나에게 꽤 좋아 보인다. 그러므로 나는 문제가 설정이라고 생각하지 않는다. 차라리 파일이 클래스 경로에 없다고 생각합니다. 신청서를 어떻게 시작 했습니까?

    Eclipse를 사용하는 경우 src / main / resources가 소스 폴더로 사용되고 자원이 대상 / 클래스에 복사되었는지 확인하십시오.

  3. ==============================

    3.

    @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;
    }
    
  4. ==============================

    4.웹 애플리케이션에서 접두사없이 리소스 경로를 작성하면 Spring은 컨텍스트 루트 (즉, WEB-INF가 포함 된 폴더)에서로드합니다. 클래스 패스에서 리소스를로드하려면 "classpath :"접두사를 사용해야합니다.

    웹 애플리케이션에서 접두사없이 리소스 경로를 작성하면 Spring은 컨텍스트 루트 (즉, WEB-INF가 포함 된 폴더)에서로드합니다. 클래스 패스에서 리소스를로드하려면 "classpath :"접두사를 사용해야합니다.

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

    5.웹 애플리케이션에서 Spring 애플리케이션 컨텍스트를로드하는 경우 다음과 같은 오류가 표시 될 수 있습니다.

    웹 애플리케이션에서 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
    
  6. from https://stackoverflow.com/questions/1947720/spring-hibernate-load-hbm-xml-from-classpath-resource by cc-by-sa and MIT license