2009-12-16 2 views
2

는 항아리에 최대 절전 모드 매핑 hbm.xml 년대를 포함하고삽입은

<bean id="sessionFactory" 
    class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> 
    <property name="dataSource"> 
     <ref bean="dataSource" /> 
    </property> 
    <property name="hibernateProperties"> 
     <props> 
     <prop key="hibernate.dialect"> 
      org.hibernate.dialect.MySQLDialect 
     </prop> 
     </props> 
    </property> 
    <property name="mappingResources"> 
     <list> 
     <value> 
      com/…/domain/Question.hbm.xml 

같은 applicationContext.xml에서 수동 참조를 피하기 등 병 /을 가리 수 있나요 항아리에 hbm.xml 매핑을 최대 절전 모드?
Nhibernate에는 어셈블리를 가리키는 옵션이 있습니다. hbm을 가져 오는 위치에서 가져옵니다.
주석이 옵션이없는

편집 : 편집 : 내 의도는 최대 절전 모드가

<list> 
    <value> 
     com/.../Question.hbm.xml 
    </value> 
    <value>com/.../Users.hbm.xml</value> 
    <value> 
     com/.../Answers.hbm.xml 
    </value> 

답변

6

당신이 보여주는 구성이 Spring의 최대 절전 모드 구성이기 때문에 Spring과 Hibernate를 함께 이야기하는 것입니다. Spring의 LocalSessionFactoryBean은 Hibernate 매핑 파일의 위치를 ​​설정하는 여러 가지 다른 방법을 허용한다; mappingResources 매개 변수 만 사용하면 표시되지만, mappingLocations, mappingJarLocationsmappingDirectoryLocations도 있습니다.

나는 당신의 예를 들어, 당신은 mappingDirectoryLocations를 사용하고 단지 같은, 당신의 JAR 내에서 특정 디렉토리를 가리 키도록 할 수도 있다고 생각 것

: 나는 mappingJarLocations가 당겨과 같이 속성을 사용

<property name="mappingDirectoryLocations"> 
     <list> 
     <value> 
      com/…/domain/ 
     </value> 
     </list> 
</property> 
+1

네, 많은 옵션 ... 기본적으로 스프링은 클래스 패스의 모든 경로를 해석합니다. 좋은 대답, 내 자신에 좋은 정교. – Zoidberg

2

예를 데리러 수있는 곳에서 일반적인 위치로 HBM의 및 지점을 수동으로 참조를 제거하는 것입니다, 기본적으로 스프링은 매핑 파일을 검색 할 때 클래스 경로에서 이동합니다. 따라서 항아리가 클래스 경로에 있으면 하이버 네이트 매핑 파일이 로컬 세션 팩토리 빈에 포함되도록 파일을 찾을 수 있습니다.

그래서 만약 당신의 매핑 파일의 경로

my/spring/package/mapping.xml 

잘 작동한다, my.spring.package에 있으며 mapping.xml이라고합니다.

편집 주석에 대한

감사합니다, 나는 내 대답을 업데이트합니다.

NO, 당신은 항아리에 가리킬 수 없습니다 ...하지만 YES, 당신은 항아리에 매핑 파일을 가리 킵니다 수 있습니다.

+0

나는 그것이 OP가 요구하는 것이라고 생각하지 않는다. 그는'sessionFactory' 설정에서 매핑 파일 이름을 전혀 열거 할 수 없는지 묻습니다. – ChssPly76

1

주어진 항아리에 모든 * hbm.xml 파일에 :

<bean id="sessionFactory" 
     class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> 
    <property name="mappingJarLocations"> 
     <list> 
      <value>WEB-INF/lib/my-lib.jar</value> 
      ... 

AnnotationSessionFactoryBean은 BTW, 주석 및 매핑 파일 좋은한다.

편집 : 나는이 글의 일부를 다시 읽어와 I는 또한 같은 추상 bean 정의를 생성하여 반복적 인 물건을 줄일 수 있다는 점을 지적 할 :

<bean id="annotatedClassList" abstract="true"> 
    <property name="packagesToScan"> 
     <list> 
      <value>com.foo.*.*</value> 
      <value>com.foo.*.*.*</value> 
      <value>com.foo.*.*.*.*</value> 
     </list> 
    </property> 
</bean> 

<bean id="writingSessionFactory" 
     parent="annotatedClassList" 
     class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> 
    <property name="mappingJarLocations"> 
    ... 

<bean id="readingSessionFactory" 
     parent="annotatedClassList" 
     class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> 
    <property name="mappingJarLocations"> 
    ... 
0

그것은 작동을 나를 위해 :

<property name="mappingJarLocations"> 
    <list> 
     <value>file:**/yourJarContainHbms.jar</value> 
    </list> 
</property> 
1

이 내 문제를 해결

<build> <sourceDirectory>src/main/java</sourceDirectory> 
<resources> 
    <resource> 
     <directory>src/main/java</directory> 
     <includes> 
      <include>**/*.xml</include> 
     </includes> 
    </resource> 
</resources> 

관련 문제