1

我正在尝试从 Spring/hibernate 中的同一个 Java 类同时访问两个数据库。它们在结构上是相同的。它们都驻留在同一个 mySql 实例中。我将它们称为“myDatabaseA”和“myDatabaseB”。

我的计划是将 DAO 和 Entity 类复制到不同的包中,例如“com.entities.packageA”和“com.entities.packageB”。在实体中,我将使用表注释的“目录”关键字来消除数据库的歧义,例如

@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

如果表相同,则不必复制类。只有两个数据源和两个会话工厂。在配置数据源时,jdbcUrl 可以指定数据库名称。

如果需要基于某些参数(例如正在访问它的用户)使用不同的数据库,您可以查看使用动态路由数据源

于 2012-10-01T08:51:12.223 回答
0

在 application-config 文件中定义两个不同的 sessionFactories,它们都指向不同的数据库。当您在应用程序中自动装配这两个 sessionFactories 时,请使用 @Qualifier 注解来加载它们。这样,您将通过使用相应的 sessionFactory 访问应用程序中的两个数据库。

于 2012-10-03T08:07:14.573 回答