Вопрос

Можно ли внедрить HBM.XML HBM.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.
Аннотации не вариант

Редактировать:Изменить: я намерен удалить ручную ссылку на HBM и указать на общее место, где Hibernate может его поднять

  <list>
    <value>
      com/.../Question.hbm.xml
    </value>
    <value>com/.../Users.hbm.xml</value>
    <value>
      com/.../Answers.hbm.xml
    </value>
Это было полезно?

Решение

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

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

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

Другие советы

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

Поэтому, если ваш файл отображения находится в моем.spring.package и называется mapping.xml, путь

my/spring/package/mapping.xml

должен работать просто отлично.

РЕДАКТИРОВАТЬ

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

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

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

РЕДАКТИРОВАТЬ: Я перечитал некоторые из этих постов, и я также хочу отметить, что вы можете сократить повторяющиеся вещи, создавая абстрактные определения бобов, как SO:

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

Это решило мою проблему

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

Меня устраивает:

<property name="mappingJarLocations">
    <list>
        <value>file:**/yourJarContainHbms.jar</value>
    </list>
</property>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top