4

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

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

编辑:

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

4

3 回答 3

4

我有同样的问题。我是这样解决的:

首先,不同的数据库应该有不同的cfg.xml文件。然后,只要您想连接到第二个数据库,只需使用 Hibernate 的配置对象。

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 个以上的数据库。希望这可以帮助。

于 2011-05-12T18:20:12.753 回答
2

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

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

一些 RDBMS 允许有限的跨数据库引用,这可能允许您使用 Hibernate 和单个DataSource.

于 2010-10-25T07:38:15.557 回答
2

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

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

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

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

于 2010-10-25T13:01:28.357 回答