2009-12-17 50 views
18

我是新的蜜蜂Hibernate和嘗試的東西。 似乎有趣的一件事是如何連接到不同的數據庫? 我有兩個問題在這裏:如何連接到休眠中的多個數據庫

  1. 如果在同一個web應用程序,我需要連接到MySQL和Oracle,我該怎麼辦呢?
  2. 我正在使用MySQL,並有兩個數據庫test1和test2,如何連接和檢索數據?

我已經在博客中看到我們可以創建不同的配置文件並執行它。 我試過了,但沒有成功。 這裏是我的嘗試:

SessionFactory sf = (SessionFactory) new Configuration().configure(path); 

其中path是配置文件的路徑。 這是正確的方法嗎?

+1

您使用的春天,如果是的話這變得更加容易 – Zoidberg 2009-12-17 13:48:09

+0

是我使用彈簧框架。如果你給我提供一個工作的例子,這將是非常好的。 – akellakarthik 2009-12-18 10:15:03

回答

32

使用註釋映射爲例:

Configuration cfg1 = new AnnotationConfiguration(); 
cfg1.configure("/hibernate-oracle.cfg.xml"); 
cfg1.addAnnotatedClass(SomeClass.class); // mapped classes 
cfg1.addAnnotatedClass(SomeOtherClass.class); 
SessionFactory sf1 = cfg1.buildSessionFactory(); 

Configuration cfg2 = new AnnotationConfiguration(); 
cfg2.configure("/hibernate-mysql.cfg.xml"); 
cfg2.addAnnotatedClass(SomeClass.class); // could be the same or different than above 
cfg2.addAnnotatedClass(SomeOtherClass.class); 
SessionFactory sf2 = cfg2.buildSessionFactory(); 

然後用SF1和SF2獲得每個數據庫的會話。對於映射文件,您只需使用cfg.addClass而不是addAnnotatedClass。在這種情況下,將cfg.xml文件放入根包中。那些將具有Oracle或MySQL方言和連接信息。

+0

非常感謝Brain。那正是我所期待的。 Karthik。 – akellakarthik 2009-12-18 10:11:35

+3

是啊,大腦...:P – gab06 2015-11-23 13:57:03

2

理想情況下,在這種情況下,您應該轉移到分佈式事務類型的系統[使用Java事務分析器org.hibernate.transaction.JTATransactionFactory]。如果你在JBoss App Server中運行,你可以使用「分佈式事務管理器」來完成。您可以詳細瞭解它here

0

您可以連接兩個數據庫TEST1和TEST2,只有一個休眠與一些技巧檢索數據:

  • 休眠的SQLQuery:只需添加數據庫名與表「SELECT * FROM test1.table1」,「選擇test2.table2"

  • * Hibernate持久性:使用該密鑰架構在Hibernate映射XML

    <class name="Table1Class" table="table1" schema="test1"> <class name="Table2Class" table="table2" schema="test2">

2

它不能使用一個hibernate配置文件來完成。你需要有兩個配置文件。

配置mysql數據庫

hibernate-mysql.cfg.xml 

配置oracle數據庫

hibernate-oracle.cfg.xml 

在細節,mysql配置文件是這樣的。

<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE hibernate-configuration PUBLIC 
     "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 
     "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 
<hibernate-configuration> 
    <session-factory> 
     <property name="hibernate.bytecode.use_reflection_optimizer">false</property> 
     <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> 
     <property name="hibernate.connection.password">PASSWORD</property> 
     <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/UR_DB_NAME</property> 
     <property name="hibernate.connection.username">USERNAME</property> 
     <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> 
     <property name="show_sql">true</property> 
     <mapping class="domain.EmployeeMysql"></mapping> 
    </session-factory> 
</hibernate-configuration> 

在細節,oracle配置文件是這樣的。

<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE hibernate-configuration PUBLIC 
     "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 
     "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 
<hibernate-configuration> 
    <session-factory> 
     <property name="hibernate.bytecode.use_reflection_optimizer">false</property> 
     <property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property> 
     <property name="hibernate.connection.password">PASSWORD</property> 
     <property name="hibernate.connection.url">jdbc:oracle:thin:UR DB NAME</property> 
     <property name="hibernate.connection.username">USERNAME</property> 
     <property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property> 
     <property name="show_sql">true</property> 
     <mapping class="domain.EmployeeOracleSql"></mapping> 
    </session-factory> 
</hibernate-configuration> 

而代碼應該是這樣的。

MySQL配置

private static SessionFactory sessionAnnotationFactory; 

sessionAnnotationFactory = new Configuration().configure("hibernate-mysql.cfg.xml").buildSessionFactory(); 

Session session = sessionAnnotationFactory.openSession(); 

的Oracle SQL配置

sessionAnnotationFactory = new Configuration().configure("hibernate-oracle.cfg.xml").buildSessionFactory(); 

Session session = sessionAnnotationFactory.openSession() 
0

您還可以添加映射類在configuration.xml文件的文件

注:這是一個註釋和資源使用資源關鍵字而不是類

<mapping class="packageName.classNmae1"/> 
<mapping class="packageName.classNmae2"/>