如何在Hibernate中连接多个数据库

ake*_*hik 24 database hibernate

我是Hibernate的新宠物并尝试了一些东西.似乎有趣的一件事是如何连接到不同的数据库?我这里有两个问题:

  1. 如果在同一个Web应用程序中我需要连接到MySQL和Oracle,我该怎么做?
  2. 我使用MySQL并有两个数据库test1和test2,如何连接和检索数据?

我在博客中读到我们可以创建不同的配置文件并执行它.我尝试过但不是成功的.这是我试过的:

SessionFactory sf = (SessionFactory) new Configuration().configure(path);
Run Code Online (Sandbox Code Playgroud)

其中path是配置文件的路径.这是正确的方法吗?

Bri*_*ing 45

使用注释映射作为示例:

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();
Run Code Online (Sandbox Code Playgroud)

然后使用sf1和sf2获取每个数据库的会话.对于映射文件,只需使用cfg.addClass而不是addAnnotatedClass.在这种情况下,将cfg.xml文件放在根包中.这些将具有Oracle或MySQL方言和连接信息.

  • 是的,大脑......:P (7认同)

Dul*_*sta 7

它不能使用一个休眠配置文件来完成。你需要有两个配置文件。

配置mysql数据库

hibernate-mysql.cfg.xml
Run Code Online (Sandbox Code Playgroud)

配置oracle数据库

hibernate-oracle.cfg.xml
Run Code Online (Sandbox Code Playgroud)

在详细信息中,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>
Run Code Online (Sandbox Code Playgroud)

在详细信息中,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>
Run Code Online (Sandbox Code Playgroud)

而代码应该是这样的。

mysql配置

private static SessionFactory sessionAnnotationFactory; 

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

Session session = sessionAnnotationFactory.openSession();
Run Code Online (Sandbox Code Playgroud)

oracle sql配置

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

Session session = sessionAnnotationFactory.openSession()
Run Code Online (Sandbox Code Playgroud)