Hibernate或Spring框架與Hibernate的結合(我正在研究一個使用Spring 2.5和Hibernate 3.2的Java Web應用程序)提供了用於從Hibernate的Hbm.xml映射文件中加載屬性值的機制。 properties
文件?我可以從屬性文件加載Hibernate映射文件的屬性值嗎?
更具體地說,我們的一些域對象映射到與大多數Hibernate映射類不同的數據庫目錄。因此,我們使用catalog="secondaryCatalogName"
屬性來指定這些類的目錄名稱。
我們使用database.properties
文件和Spring的PropertyPlaceholderConfigurer
來指定我們所有Spring配置中的默認和輔助目錄名稱。但是,如果需要更改輔助目錄名稱,則還必須更改少數hbm.xml文件中的目錄屬性。如果我可以在映射文件中爲目錄屬性使用諸如${secondary.catalog}
之類的佔位符,那也太好了。
這可能嗎?
下面是使用配置片段一個簡化的例子:
數據庫結構
MySQL instance
- catalog: CatalogA
- table: TableFoo
- table: TableBar
- ...
- catalog: CatalogB
- table: TableBaz
- ...
database.properties
primary.catalog=CatalogA
secondary.catalog=CatalogB # <-- wish I could use this property in hbm.xml
的SessionFactory - 構型(彈簧):
<bean id="sessionFactory" class="...hibernate3.LocalSessionFactoryBean">
<property name="mappingResources">
<list>
<value>Foo.hbm.xml</value>
<value>Bar.hbm.xml</value>
<value>Baz.hbm.xml</value>
...
</list>
</property>
...
<property name="hibernateProperties">
<props>
...
<prop key="hibernate.default_catalog">${primary.catalog}</prop>
</props>
</property>
</bean>
Foo.hbm.xml:
Hibernate映射爲CatalogA域對象(CatalogA實體映射總是由於hibernate.default_catalog
屬性正常工作)
<hibernate-mapping>
<class name="Foo" table="TableFoo">
...
</class>
</hibernate-mapping>
巴茲.hbm.xml:
Hibernate映射在CatalogB域對象(這是因爲目錄屬性的問題:它必須在CatalogB實體的所有 hbm.xmls改變,如果我想使用一個不同的二級目錄名)
<hibernate-mapping>
<class name="Baz" table="TableBaz" catalog="CatalogB">
...
</class>
</hibernate-mapping>
是的,我用的是hibernate.default_catalog屬性爲我的大部分類的配置默認的目錄名稱。這工作正常,但問題是配置少數其他類使用不同的目錄名稱。 – Janne