簡體   English   中英

在jar中嵌入hibernate hbm.xml映射

[英]Embed hibernate hbm.xml mappings in jar

是否可以將hibernate映射hbm.xml嵌入到jar中,並避免在applicationContext.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

並指向jar / etc?
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配置。 Spring的LocalSessionFactoryBean接受多種不同的方法來設置Hibernate映射文件的位置; 你只顯示了使用mappingResources參數,但也有mappingLocationsmappingJarLocationsmappingDirectoryLocations

我認為,對於您的示例,您可能希望使用mappingDirectoryLocations並將其指向JAR中的特定目錄,例如:

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

是的,默認情況下,Spring可以在搜索映射文件時從類路徑開始。 因此,如果jar在您的類路徑上,它應該找到文件沒有問題,以便將hibernate映射文件包含在本地會話工廠bean中。

因此,如果您的映射文件位於my.spring.package中並且名為mapping.xml,則為路徑

my/spring/package/mapping.xml

應該工作得很好。

編輯

感謝您的評論,我將更新我的答案。

,你不能在一個罐子點......但YES,你可能指向在罐子映射文件。

我像這樣使用mappingJarLocations屬性來獲取給定jar中的所有* 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很好用,順便說一句。

編輯:我重新閱讀其中的一些帖子,我還想指出你可以通過創建抽象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"> ... 

這解決了我的問題

 <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 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM