Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database Spring/Hibernate在同一mySQL中访问不同的数据库_Database_Spring_Hibernate - Fatal编程技术网

Database Spring/Hibernate在同一mySQL中访问不同的数据库

Database Spring/Hibernate在同一mySQL中访问不同的数据库,database,spring,hibernate,Database,Spring,Hibernate,我试图在Spring/hibernate中从同一个Java类同时访问两个数据库。它们在结构上是相同的。它们都位于同一个mySql实例中。我叫他们myDatabaseA和myDatabaseB 我的计划是将DAO和实体类复制到不同的包中,例如com.entities.packageA和com.entities.packageB。在实体中,我将使用表注释的catalog关键字来消除数据库的歧义,例如 @Entity @Table(catalog="myDatabaseB", name = "myTa

我试图在Spring/hibernate中从同一个Java类同时访问两个数据库。它们在结构上是相同的。它们都位于同一个mySql实例中。我叫他们myDatabaseA和myDatabaseB

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

@Entity
@Table(catalog="myDatabaseB", name = "myTable1")
最后,在会话工厂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中的实体和DAO,在访问myDatabaseB时使用myPackageB


这有意义吗?我对Spring/Hibernate有点陌生,所以这可能有点离谱

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


如果需要根据某些参数(如访问数据库的用户)使用不同的数据库,您可以使用一个

在应用程序配置文件中定义两个不同的会话工厂,两者都指向不同的数据库。
当您在应用程序中自动连接这两个sessionFactory时,请使用@Qualifier annotation来加载它们。这样,您可以通过使用相应的sessionFactory来访问应用程序中的两个数据库。

这是同一个mySql实例,但该实例中的数据库不同。如何在客户机代码中指定正在使用的会话?