2012-09-30 136 views
1

我試圖從Spring/Hibernate中的同一個Java類同時訪問兩個數據庫。它們在結構上是相同的。並且它們都駐留在相同的mySql實例中。我會稱它們爲「myDatabaseA」和「myDatabaseB」。Spring/Hibernate在同一個mySQL中訪問不同的數據庫

我的計劃是將DAO和實體類複製到不同的包中,例如「com.entities.packageA」和「com.entities.packageB」。在實體中,我將使用表註釋的「目錄」關鍵字來消除數據庫的歧義,例如訪問myDatabaseA當

<!-- 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> 

在代碼中,我:

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

最後,在會話工廠bean時,我會嘗試在「basePackages」屬性指定兩個數據庫實體如下當訪問myDatabaseB時,將使用「myPackageA」和myPackageB中的實體和道數。

這是否有意義?我對Spring/Hibernate很陌生,所以這可能會脫離基礎。

回答

0

如果表格相同,則不必複製這些類。只需要兩個dataSource和兩個sessionFactory。在配置數據源時,jdbcUrl可以指定數據庫名稱。

如果不同的數據庫需要根據像用戶的一些參數誰在訪問它,你可以看看使用dynamic routing datasource

+0

它與mySql實例相同,但是該實例中的數據庫不同。我將如何指定我在客戶端代碼中使用哪個會話? –

0

定義您的應用程序的配置文件兩個不同sessionFactories,都指向不同的數據庫中。 當您在應用程序中自動裝配這兩個sessionFactory時,使用@Qualifier註釋來加載它們。這樣,您將通過使用相應的sessionFactory來訪問應用程序中的兩個數據庫。

相關問題