2012-10-11 79 views
2

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> 

回答

0

你使用hibernate.properties文件嗎?

你可以定義其他屬性,如hibernate.default_schema,hibernate.default_catalog等.. Optional configuration properties

+0

是的,我用的是hibernate.default_catalog屬性爲我的大部分類的配置默認的目錄名稱。這工作正常,但問題是配置少數其他類使用不同的目錄名稱。 – Janne