1

Spring/hibernateの同じJavaクラスから2つのデータベースに同時にアクセスしようとしています。それらは構造の点で同一です。そして、それらは両方とも同じmySqlインスタンスに存在します。それらを「myDatabaseA」および「myDatabaseB」と呼びます。

私の計画は、DAOクラスとEntityクラスを異なるパッケージ(たとえば、「com.entities.packageA」と「com.entities.packageB」)に複製することです。エンティティでは、テーブルアノテーションの「catalog」キーワードを使用してデータベースの曖昧性を解消します。

@Entity
@Table(catalog="myDatabaseB", name = "myTable1")

最後に、Session Factory Beanで、次のように「basePackages」プロパティで両方のデータベースのエンティティを指定しようとします。

<!--  Session factory bean -->
<b:bean id="sessionFactory" class="com.mycompany.spring.ExtendedAnnotationSessionFactoryBean"">
    <b:property name="dataSource" ref="dataSource" />
    <b:property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />
    <b:property name="hibernateProperties" ref="hibernateProperties" />
    <b:property name="entityInterceptor" ref="baseEntityInterceptor" />
    <b:property name="basePackages">
        <b:list>
            <b:value>com.entities.myPackageA</b:value>
            <b:value>com.entities.myPackageB</b:value>
        </b:list>
    </b:property>
</b:bean>

コードでは、myDatabaseAにアクセスするときに、「myPackageA」のエンティティとdaosを使用し、myDatabaseBにアクセスするときにmyPackageBを使用します。

これは意味がありますか?私はSpring/Hibernateに少し慣れていないので、これはベースから大きく外れている可能性があります。

4

2 に答える 2

0

application-config ファイルで 2 つの異なる sessionFactory を定義し、両方とも異なるデータベースを指します。アプリケーションでこれら 2 つの sessionFactory を自動接続する場合は、@Qualifier アノテーションを使用して両方をロードします。このようにして、対応する sessionFactory を使用してアプリケーションの両方のデータベースにアクセスできます。

于 2012-10-03T08:07:14.573 に答える
0

テーブルが同一であれば、クラスを複製する必要はありません。2 つの dataSource と 2 つの sessionFactory があるだけです。dataSource の構成中に、jdbcUrl はデータベース名を指定できます。

アクセスしているユーザーなどのパラメーターに基づいて異なるデータベースを使用する必要がある場合は、動的ルーティング データソースの使用を検討できます。

于 2012-10-01T08:51:12.223 に答える