使用Hibernate在不同数据库中的2个表上进行连接

我需要在Hibernate中加入两个独立的Oracle数据库 (不是模式)中的两个表。 目前,我有两个Hibernate会话进入单独的数据库。 在任何人看到Hibernate Shards之前 ,我花了一天时间看着那个子项目并且发现:它是针对水平分区数据(所有表必须在所有数据库AFAIK中),有没有办法告诉Shards只能在一个数据库中查看( Hibernate Shards Docs ),而且不再使用它。

我曾想过试图解决这个问题的事情:

  • 在两个表上执行findAll()或某些受限制的变体,并使用一些循环手动执行连接。 (适用于非常小的桌子 – 禁止从小桌子上来)

  • 让会话进行某种交互(我不知道这是否可行 – 将不得不查看Hibernate Session API)

  • 从不同hibernate-xxxx.cfg.xml的URL字符串中删除数据库名称,并将它们插入到单独的hbm.xml文件中,如下所示:

    (似乎没有从我最初的测试工作,这看起来像卡车大小的安全漏洞)

  • 使用存储库模式(如果我的Java-Fu足够强大,则不确定)

在上面的一个案例中是否有一些我忽略的东西,或者它是否是我未在上面列出的另一种方式?

不幸的是,你有几个问题。

  • Hibernate不支持跨多个“物理”数据库实例加入
  • 开箱即用,大多数数据库不支持跨多个“物理”数据库实例加入

从根本上说,DB在连接同一数据库中的表时只有良好/高效。 有两种方法可以跨数据库连接,但如果两个表的大小很大,这可能是一个问题,并且性能可能会受到影响。 做一些关于“跨越数据库的oracle连接”的谷歌搜索,你会发现一些关于如何做到这一点的指针,但它涉及摆弄Oracle创建从一个数据库到另一个数据库的虚拟链接。

我会考虑在内存中进行连接,如果您觉得数据集符合内存约束,那么您只能在一个特殊情况下执行此操作。

如果您需要在这两个数据库之间进行不同的连接,那么我会寻求更持久的解决方案,例如上面的Oracle链接。

我自己没有这方面的经验,但我知道Oracle支持两个独立数据库实例之间的数据库“链接”。 也许这篇文章会对你有帮助吗?

在Hibernate论坛上发布关于在两个实例之间使用Oracle链接的post