首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Hibernate中连接多个数据库

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

Stack Overflow用户
提问于 2009-12-17 21:40:23
回答 6查看 85.9K关注 0票数 28

我是冬眠和尝试事物的新手。最有趣的一件事是如何连接到不同的数据库?这里我有两个问题:

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

我在一篇博客中读到,我们可以创建不同的配置文件并这样做。我试过了,但不成功。这是我尝试过的:

代码语言:javascript
复制
SessionFactory sf = (SessionFactory) new Configuration().configure(path);

其中path是配置文件的路径。这条路对吗?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-12-18 06:04:24

以注释映射为例:

代码语言:javascript
复制
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方言和连接信息。

票数 53
EN

Stack Overflow用户

发布于 2017-08-14 21:49:44

这不能使用一个hibernate配置文件来完成。您需要为它准备两个配置文件。

配置mysql数据库

代码语言:javascript
复制
hibernate-mysql.cfg.xml

配置oracle数据库

代码语言:javascript
复制
hibernate-oracle.cfg.xml

具体来说,mysql配置文件如下所示。

代码语言:javascript
复制
<?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配置文件如下所示。

代码语言:javascript
复制
<?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配置

代码语言:javascript
复制
private static SessionFactory sessionAnnotationFactory; 

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

Session session = sessionAnnotationFactory.openSession();

oracle sql configuration

代码语言:javascript
复制
sessionAnnotationFactory = new Configuration().configure("hibernate-oracle.cfg.xml").buildSessionFactory();

Session session = sessionAnnotationFactory.openSession()
票数 8
EN

Stack Overflow用户

发布于 2009-12-17 21:55:41

理想情况下,您应该使用Java transaction Analyzer org.hibernate.transaction.JTATransactionFactory迁移到分布式事务类型的系统。如果你在JBoss应用服务器中运行,你可以通过使用“分布式事务管理器”来实现。你可以在here上了解更多。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1921865

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档