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>
答案 0 :(得分:0)
您使用hibernate.properties
档吗?
您可以定义其他属性,例如hibernate.default_schema,hibernate.default_catalog等,.. Optional configuration properties