使用多个数据库的Hibernate

4
我需要为不同的客户拥有多个数据库。如何使用Hibernate处理多个数据库?是否有任何好的示例可以做到这一点?
我可以创建Configuration对象,然后构建SessionFactory,但那样会每次创建一个新的SessionFactory,这并不明智。
编辑:
现在,当用户登录时,我可以获得hibernate Configuration对象,但是如何使用该对象创建/获取SessionFactory,以便每个数据库只有一个SessionFactory(当然,如果同时使用多个数据库,则可能会有多个SessionFactory)?
3个回答

4

我曾经也遇到过同样的问题,解决方法如下:

首先,不同的数据库应该有不同的cfg.xml文件。然后,每当你想连接到第二个数据库时,只需使用Hibernate的Configuration对象即可。

Configuration config = new Configuration().configure("<complete path to your cfg.xml file>");
SessionFactory sessionFactory = config.buildSessionFactory();
Session session = sessionFactory.getCurrentSession();
session.beginTransaction();

我在这里找到了这个链接:http://www.coderanch.com/t/468821/ORM/java/If-hibernate-cfg-xml-has
我相信这可以扩展到超过2个数据库。 希望这能帮助到您。

2
一个Hibernate的SessionFactory一次只能处理一个DataSource,通常情况下每个DataSource只对应一个数据库。所以,如果你需要多个数据库,那么最简单的解决方案几乎肯定是多个SessionFactory实例。
我不确定为什么你认为这样做不明智,但在我看来这似乎足够合理。
一些关系型数据库允许有限的跨数据库引用,这可能允许你使用Hibernate和一个单一的DataSource做一些事情,但你没有告诉我们关于你的数据库设置的任何信息。

我不知道如何动态创建新的会话工厂并将其映射到Spring框架,以便在我的DAO中使用Hibernate会话。 - newbie
@新手:你没有提到动态创建它们的事情。这确实是一个坏主意。Hibernate不适合这项工作。 - skaffman
为什么?一个会话工厂用于客户,当用户登录时动态创建。我没有看到任何问题,但我不知道最好的实现方式是什么。 - newbie

2
我需要为不同的客户创建多个数据库。如何使用Hibernate处理多个数据库?有没有好的示例可以参考?
您确实需要创建多个SessionFactory(每个数据库一个)。
现在,当用户登录时,我可以获取Hibernate Configuration对象,但是如何使用该对象创建/获取SessionFactory,以便一个数据库只有一个SessionFactory(当然,如果同时使用多个数据库,则可能会有多个SessionFactory)?
使用一些唯一的Map。如果尚未创建SessionFactory,请构建它并将其存储在映射中。

1
谢谢您的回答,但由于所有数据库都是相同的,我设法只使用一个SessionFactory。现在我创建Connection对象并使用方法sessionFactory.openSession(connection)来获取Hibernate会话。现在我可以动态连接到任何我想要的数据库。 - newbie
@新手:我不是有意冒犯,但当你提问时应该尽可能给出相关细节,读者并非能够心灵感应。 - Pascal Thivent
抱歉,我会尽量在下次更加具体。 - newbie
1
@新手:没问题,只是提出“好”的问题会更有可能得到“好”的答案 :) - Pascal Thivent

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接