2012-10-11 78 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