我需要为不同的客户提供多个数据库。我如何使用Hibernate处理多个数据库?有没有什么好的例子如何做到这一点?使用多个数据库休眠
我可以创建配置对象,然后构建SessionFactory,但这会始终创建一个新的会话工厂,这不会是非常明智的。
编辑:
现在,我可以得到Hibernate的配置对象用户登录的时候,但我怎样才能创建/获取与该对象的会话工厂,以便将只有因为如果一个数据库(当然一个会话工厂多个数据库同时使用,那么可以有多个会话工厂)?
我需要为不同的客户提供多个数据库。我如何使用Hibernate处理多个数据库?有没有什么好的例子如何做到这一点?使用多个数据库休眠
我可以创建配置对象,然后构建SessionFactory,但这会始终创建一个新的会话工厂,这不会是非常明智的。
编辑:
现在,我可以得到Hibernate的配置对象用户登录的时候,但我怎样才能创建/获取与该对象的会话工厂,以便将只有因为如果一个数据库(当然一个会话工厂多个数据库同时使用,那么可以有多个会话工厂)?
我需要为不同的客户提供多个数据库。我如何使用Hibernate处理多个数据库?有没有什么好的例子如何做到这一点?
确实会创建多个SessionFactory
(每个数据库一个)。
现在,我可以得到Hibernate的配置对象,当用户登录,但我怎样才能创建/获取与该对象的会话工厂,这样如果使用多个数据库将只有一个一个数据库(当然会话工厂同时,那么可以有多个会话工厂)?
使用一些独特的Map<SomeKey, SessionFactory>
。如果SessionFactory
尚未创建,请构建它并将其存储在地图中。
休眠SessionFactory
一次只能处理一个DataSource
,一般而言,每个DataSource
指的是一个且只有一个数据库。所以如果你需要多个数据库,那么最简单的解决方案几乎肯定是多个SessionFactory
实例。
我不知道为什么你认为这不会是明智的,但是,这似乎对我来说足够公平。
某些RDBMS允许有限的跨数据库引用,这可能允许您使用Hibernate和一个DataSource
做某些事情,但是您没有告诉我们有关您的数据库设置的任何信息。
我有同样的问题。我这样解决:
首先,不同的数据库应该有不同的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级以上的数据库。 希望这有助于。
Thanx为这个答案,但因为所有数据库是相同的,我设法只使用一个SessionFactory。现在我创建Connection对象并使用方法sessionFactory.openSession(connection);获得休眠会话。现在我可以动态连接到任何我想要的数据库。 – newbie 2010-10-25 13:13:22
@newbie:我不是故意粗鲁,但在提问时应该尝试给出相关细节,读者不介意读者。 – 2010-10-25 13:25:14
对不起,我下次尝试更具体一点 – newbie 2010-10-25 14:10:34