0

同じデータベース サーバーで 2 つの異なるスキーマを使用する Java/spring/hibernate プロジェクトがあります (2 番目のスキーマは読み取り専用です)。両方のスキーマの名前を定義する 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>

しかし問題は、現在、両方のスキーマにアクセスする必要がある休止状態のオブジェクトがいくつかあることです。これを実現するために、「catalog」プロパティを使用して、2 番目のスキーマを hibernate マッピングに次のように定義しました。

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

残念ながら、2つの異なるスキーマを持つ同じSessionFactoryを持つことはできません。他のオプションでは、2つのSessionFactoriesを使用する必要があります。

また、2つの異なるスキーマを持つことができるのに、2つの異なるSessionFactoriesを使用できない理由もわかりません。

ただし、これが当てはまる場合は、アプリケーションの設計とアーキテクチャを真剣に再検討する必要があります...

于 2012-12-13T02:38:05.790 に答える