我有一个 java/spring/hibernate 项目,它在同一数据库服务器上使用两个不同的模式(第二个模式是只读的)。我设置了一个定义两个模式名称的 database.properties 文件:
default.catalog=testdb1
db2.catalog=testdb2
在 ApplicationContext.xml 中,我可以从属性文件中设置默认模式,如下所示:
<property name="hibernateProperties"><props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</prop>
<prop key="hibernate.default_catalog">${default.catalog}</prop>
<prop key="hibernate.jdbc.batch_size">50</prop>
</props>
但问题是我目前有一些需要访问这两种模式的休眠对象。为了实现这一点,我使用了“目录”属性将第二个模式定义为休眠映射,如下所示:
DBObjectXX.hbm.xml
<class name="fi.company.project.object.DBObjectXX" table="TestTableFromDB1">
<id name="id" type="int">
<column name="ID"/>
<generator class="native"/>
</id>
<join table="TestTableFromDB2" catalog="testdb2"> <-- Change this ..
<key column="ID" not-null="true" unique="true"/>
<property name="propertyYY" type="string">
<column name="PropertyYY" not-null="true"/>
</property>
</join>
</class>
这工作正常。但是我时不时需要更改模式名称(例如在测试中),我必须通过搜索和替换每个映射文件来做到这一点。我想做的是让模式名称来自 database.properties 文件,如下所示:
<class name="fi.company.project.object.DBObjectXX" table="TestTableFromDB1">
<id name="id" type="int">
<column name="ID"/>
<generator class="native"/>
</id>
<join table="TestTableFromDB2" catalog="${db2.catalog}"> <-- .. to this or something similar
<key column="ID" not-null="true" unique="true"/>
<property name="propertyYY" type="string">
<column name="PropertyYY" not-null="true"/>
</property>
</join>
</class>
关于如何做到这一点的任何想法?