2009-12-16 51 views
2

是否有可能以嵌入休眠映射的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 

在applicationContext.xml中手動參考並將其指向一個罐子/等?
Nhibernate有這樣一個選項可以指向一個裝配,從那裏拿起HBM。
註釋是不是一種選擇

編輯: 編輯: 我的目的是從那裏休眠可以把它撿起來

​​

回答

6

只是爲了澄清一下:您正在專門討論Spring和Hibernate,因爲您展示的配置是Spring的Hibernate配置。 Spring的LocalSessionFactoryBean接受多種不同的方法來設置Hibernate映射文件的位置;您只能使用mappingResources參數顯示,但也有mappingLocations,mappingJarLocationsmappingDirectoryLocations

我會認爲你的例子,你可能想使用mappingDirectoryLocations,並只需將它指向一個特定的目錄你的JAR中,如:

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

是的,這麼多的選項......默認情況下,Spring會從類路徑中解釋每條路徑......如果您認爲它是有道理的話。好的回答,我自己的精心製作。 – Zoidberg 2009-12-16 18:19:52

2

是消除對通用位置手動參考HBM的和點,你可以,默認情況下,Spring在搜索映射文件時從類路徑中移出。所以如果這個jar包含在你的類路徑中,它應該找到這些文件沒有問題,因爲hibernate映射文件將包含在你的本地會話工廠bean中。

所以,如果你的映射文件是my.spring.package,被稱爲mapping.xml,路徑

my/spring/package/mapping.xml 

應該只是罰款。

編輯

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

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

+0

我不認爲這是OP所要求的。他問是否有可能在'sessionFactory'配置中根本不列出映射文件名。 – ChssPly76 2009-12-16 18:16:33

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玩弄註釋和映射文件不錯,順便說一句。

編輯:我重讀了這些職位的,我也希望通過創建抽象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>