0

我有一个 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>

关于如何做到这一点的任何想法?

4

1 回答 1

0

不幸的是,您不能拥有具有两个不同模式的相同 SessionFactory。在其他选项中,您必须使用两个 SessionFactories。

我也不明白为什么你不能使用两个不同的 SessionFactories 如果你可以有两个不同的模式。

如果这是真的,那么伙计,你需要认真重新考虑你的应用程序设计和架构......

于 2012-12-13T02:38:05.790 回答