2

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

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

我们使用一个database.properties文件和 SpringPropertyPlaceholderConfigurer来指定我们所有 Spring 配置中的默认和辅助目录名称。但是,如果我需要更改二级目录名称,我还必须更改那几个 hbm.xml 文件中的目录属性。如果我也可以在映射文件中使用诸如${secondary.catalog}目录属性之类的占位符,那就太好了。

这可能吗?

这是一个使用配置片段的简化示例:

数据库结构

MySQL instance
- catalog: CatalogA
    - table: TableFoo
    - table: TableBar
    - ...
- catalog: CatalogB
    - table: TableBaz
    - ...

数据库属性

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:

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

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

Baz.hbm.xml:

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

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

1 回答 1

0

你用hibernate.properties文件吗?

您可以在其中定义其他属性,例如 hibernate.default_schema、hibernate.default_catalog 等。可选配置属性

于 2012-10-11T05:27:28.373 回答