[英]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
參數,但也有mappingLocations
, mappingJarLocations
和mappingDirectoryLocations
。
我認為,對於您的示例,您可能希望使用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.