Pergunta

É possível incorporar o mapeamento de hibernato hbm.xml's no frasco e evitar a referência manual no applicationcontext.xml como

  <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

e apontar para um jar/etc?
A Nhibernate tem essa opção para apontar para uma montagem, de onde ele pega os HBMs.
Anotações não são uma opção

Editar:Editar: Minha intenção é remover a referência manual aos HBMs e apontar para um local genérico de onde o hibernato pode buscá -lo

  <list>
    <value>
      com/.../Question.hbm.xml
    </value>
    <value>com/.../Users.hbm.xml</value>
    <value>
      com/.../Answers.hbm.xml
    </value>
Foi útil?

Solução

Só para esclarecer também: você está falando especificamente sobre a primavera e a hiberna juntos, já que a configuração que você está mostrando é a configuração de Hibernate da Spring. Spring's LocalSessionFactoryBean Aceita uma infinidade de maneiras diferentes de definir a localização dos seus arquivos de mapeamento de hibernato; você só mostra usando o mappingResources parâmetro, mas também há mappingLocations, mappingJarLocations, e mappingDirectoryLocations.

Eu pensaria que, para o seu exemplo, você pode querer usar mappingDirectoryLocations E apenas aponte para um diretório específico dentro do seu frasco, como:

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

Outras dicas

Sim, você pode, por padrão, a mola vai do caminho da classe ao pesquisar arquivos de mapeamento. Portanto, se o frasco estiver no caminho da sua classe, ele deve encontrar os arquivos sem problemas para que os arquivos de mapeamento de hibernato sejam incluídos no seu feijão de fábrica de sessão local.

Portanto, se o seu arquivo de mapeamento estiver em my.spring.package e for chamado de mapping.xml, o caminho

my/spring/package/mapping.xml

deve funcionar bem.

EDITAR

Obrigado pelo comentário, atualizarei minha resposta.

NÃO, você não pode apontar para uma jarra ... mas SIM, você pode apontar para mapear arquivos no frasco.

Eu uso o atributo MappingJarlocations, como o So para puxar todos os arquivos *hbm.xml em um determinado frasco:

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

AnotaçõessssessionFactoryBean Reproduz bem com anotações e arquivos de mapeamento, btw.

EDIT: Reli algumas dessas postagens e também quero ressaltar que você pode reduzir coisas repetitivas, criando definições abstratas de feijão como assim:

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

Isso resolveu meu problema

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

Funciona para mim:

<property name="mappingJarLocations">
    <list>
        <value>file:**/yourJarContainHbms.jar</value>
    </list>
</property>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top