Hibernate使用多个数据库

时间:2010-10-25 07:06:00

标签: hibernate spring multiple-databases

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

我可以创建Configuration对象然后构建SessionFactory,但这会创建一个新的会话工厂,这不是很明智。

编辑:

现在我可以在用户登录时获取hibernate Configuration对象,但是如何使用该对象创建/获取会话工厂,以便一个数据库只有一个会话工厂(当然,如果同时使用多个数据库)时间,然后可以有多个会议工厂)?

3 个答案:

答案 0 :(得分: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个以上的数据库。 希望这会有所帮助。

答案 1 :(得分:2)

Hibernate SessionFactory一次只能处理一个DataSource,一般来说每个DataSource指的是一个且只有一个数据库。因此,如果您需要多个数据库,那么最简单的解决方案几乎肯定是多个SessionFactory实例。

我不确定你为什么认为这不明智,但对我来说这似乎是公平的。

某些RDBMS允许有限的跨数据库引用,这可能允许您使用Hibernate和单个DataSource执行某些操作,但您没有告诉我们有关您的数据库设置的任何信息。

答案 2 :(得分:2)

  

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

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

  

现在我可以在用户登录时获取hibernate Configuration对象,但是如何使用该对象创建/获取会话工厂,以便一个数据库只有一个会话工厂(当然,如果同时使用多个数据库)时间,然后可以有多个会议工厂)?

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