2009-12-16 4 views
2

Можно ли встроить отображение спящего режима hbm.xml, чтобы банка и избежать ручной ссылки в applicationContext.xml какВставить зимует 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 

и указать его в банку/и т.д.?
Nhibernate имеет такую ​​возможность указывать на сборку, откуда она поднимает hbm's.
Аннотации не вариант

Edit: Edit: Мое намерение состоит в том, чтобы удалить вручную ссылки на НВМ и точку в родовом месте, откуда гибернации может забрать его

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

ответ

6

Просто уточните, а также: вы специально говорите о Spring и Hibernate вместе, так как конфигурация, которую вы показываете, представляет собой конфигурацию Спящего режима Spring. Spring LocalSessionFactoryBean принимает множество различных способов определения местоположения файлов сопоставления Hibernate; вы показываете только параметр mappingResources, но есть также mappingLocations, mappingJarLocations и mappingDirectoryLocations.

Я думаю, что для примера, вы можете использовать mappingDirectoryLocations и просто указать его в определенный каталог в вашем JAR, такие как:

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

Да, так много вариантов ... по умолчанию spring интерпретирует каждый путь из classpath ... который, если вы думаете об этом, имеет смысл. Хороший ответ, хорошая проработка. – Zoidberg

2

Да, вы можете, по умолчанию Spring переходит из пути к классу при поиске файлов сопоставления. Поэтому, если jar находится на вашем пути к классу, он должен найти файлы без проблем для файлов сопоставления спящего режима, которые будут включены в ваш локальный фабричный компонент сеанса.

Так что, если ваш файл отображения в my.spring.package и называется mapping.xml, путь

my/spring/package/mapping.xml 

должен работать нормально.

EDIT

Спасибо за комментарий, я буду обновлять мой ответ.

NO, вы не можете указать на баночке ... но ДА, вы можете указать на отображение файлов в банке.

+0

Я не думаю, что это то, о чем спрашивает ОП. Он спрашивает, возможно ли вообще не перечислять имена файлов сопоставления в конфигурации 'sessionFactory'. – ChssPly76

1

Я использую атрибут mappingJarLocations как и тянуть во всех * 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 играет хорошо с аннотациями и отображения файлов, кстати.

Edit: я перечитываю некоторые из этих должностей, и я также хочу отметить, что вы можете сократить повторяющиеся вещи, создавая абстрактные определения боб, как так:

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

Смежные вопросы