Database Spring/Hibernate在同一mySQL中访问不同的数据库
我试图在Spring/hibernate中从同一个Java类同时访问两个数据库。它们在结构上是相同的。它们都位于同一个mySql实例中。我叫他们myDatabaseA和myDatabaseB 我的计划是将DAO和实体类复制到不同的包中,例如com.entities.packageA和com.entities.packageB。在实体中,我将使用表注释的catalog关键字来消除数据库的歧义,例如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
@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实例,但该实例中的数据库不同。如何在客户机代码中指定正在使用的会话?