我需要为不同的客户提供多个数据库。如何使用Hibernate处理多个数据库?有没有很好的例子如何做到这一点?
我可以创建Configuration对象然后构建SessionFactory,但这会创建一个新的会话工厂,这不是很明智。
编辑:
现在我可以在用户登录时获取hibernate Configuration对象,但是如何使用该对象创建/获取会话工厂,以便一个数据库只有一个会话工厂(当然,如果同时使用多个数据库)时间,然后可以有多个会议工厂)?
答案 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
,请构建它并将其存储在地图中。