2010-10-25 87 views
4

我需要为不同的客户提供多个数据库。我如何使用Hibernate处理多个数据库?有没有什么好的例子如何做到这一点?使用多个数据库休眠

我可以创建配置对象,然后构建SessionFactory,但这会始终创建一个新的会话工厂,这不会是非常明智的。

编辑:

现在,我可以得到Hibernate的配置对象用户登录的时候,但我怎样才能创建/获取与该对象的会话工厂,以便将只有因为如果一个数据库(当然一个会话工厂多个数据库同时使用,那么可以有多个会话工厂)?

回答

2

我需要为不同的客户提供多个数据库。我如何使用Hibernate处理多个数据库?有没有什么好的例子如何做到这一点?

确实会创建多个SessionFactory(每个数据库一个)。

现在,我可以得到Hibernate的配置对象,当用户登录,但我怎样才能创建/获取与该对象的会话工厂,这样如果使用多个数据库将只有一个一个数据库(当然会话工厂同时,那么可以有多个会话工厂)?

使用一些独特的Map<SomeKey, SessionFactory>。如果SessionFactory尚未创建,请构建它并将其存储在地图中。

+1

Thanx为这个答案,但因为所有数据库是相同的,我设法只使用一个SessionFactory。现在我创建Connection对象并使用方法sessionFactory.openSession(connection);获得休眠会话。现在我可以动态连接到任何我想要的数据库。 – newbie 2010-10-25 13:13:22

+0

@newbie:我不是故意粗鲁,但在提问时应该尝试给出相关细节,读者不介意读者。 – 2010-10-25 13:25:14

+0

对不起,我下次尝试更具体一点 – newbie 2010-10-25 14:10:34

2

休眠SessionFactory一次只能处理一个DataSource,一般而言,每个DataSource指的是一个且只有一个数据库。所以如果你需要多个数据库,那么最简单的解决方案几乎肯定是多个SessionFactory实例。

我不知道为什么你认为这不会是明智的,但是,这似乎对我来说足够公平。

某些RDBMS允许有限的跨数据库引用,这可能允许您使用Hibernate和一个DataSource做某些事情,但是您没有告诉我们有关您的数据库设置的任何信息。

+0

我不知道如何创建动态的新会话工厂并将它们映射到srping框架,所以我可以在我的DAO中使用hibernate会话。 – newbie 2010-10-25 07:40:16

+0

@newbie:你没有谈及动态创建它们。这确实是一个坏主意。休眠不是这项工作的工具。 – skaffman 2010-10-25 07:50:29

+0

为什么?客户的一个会话工厂,在用户登录时动态创建。我看不出有什么问题,但我只是不知道什么是实现它的最好方法 – newbie 2010-10-25 08:47:14

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级以上的数据库。 希望这有助于。