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>