我可以从属性文件加载Hibernate映射文件的属性值吗?

时间:2012-10-11 04:53:50

标签: spring hibernate configuration hibernate-mapping

Hibernate或Spring Framework和Hibernate的组合(我正在使用Spring 2.5和Hibernate 3.2的Java Web应用程序)提供了在Hibernate的hbm.xml映射文件中加载属性值的任何机制。 properties个文件?

更具体地说,我们的一些域对象映射到与大多数Hibernate映射类不同的数据库目录。因此,我们使用catalog="secondaryCatalogName"属性来指定这些类的目录名称。

我们使用database.properties文件和Spring的PropertyPlaceholderConfigurer来指定我们所有Spring配置中的默认和辅助目录名称。但是,如果我需要更改辅助目录名称,我还必须在少数hbm.xml文件中更改目录属性。如果我可以在映射文件中使用诸如${secondary.catalog}的占位符作为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 -configuration(Spring):

<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:

CatalogA 中域对象的Hibernate映射(由于hibernate.default_catalog属性,CatalogA实体映射始终正常工作)

<hibernate-mapping>
    <class name="Foo" table="TableFoo">
    ...
    </class>
</hibernate-mapping>

Baz.hbm.xml:

CatalogB 中域对象的Hibernate映射(由于目录属性,这是问题:它必须在所有 hbm中更改。 xmls的CatalogB实体,如果我想使用不同的辅助目录名称)

<hibernate-mapping>
    <class name="Baz" table="TableBaz" catalog="CatalogB">
    ...
    </class>
</hibernate-mapping>

1 个答案:

答案 0 :(得分:0)

您使用hibernate.properties档吗?

您可以定义其他属性,例如hibernate.default_schema,hibernate.default_catalog等,.. Optional configuration properties