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

时间:2010-08-23 22:55:30

标签: java database hibernate join

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

我一直在考虑尝试解决这个问题:

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

  • 让会话进行某种交互(我不知道这是否可行 - 必须查看Hibernate会话API)

  • 从不同hibernate-xxxx.cfg.xml的URL字符串中删除数据库名称,并将它们插入到单独的hbm.xml文件中,如下所示:
    <class name="foo" table="foo_table" schema="foo_schema" catalog="foo_db">
    (似乎没有从我最初的测试中起作用,而且看起来像卡车大小的安全漏洞)

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

在上述某个案例中,我有什么东西可以忽略,还是我没有在上面列出的另一种方式?

2 个答案:

答案 0 :(得分:3)

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

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

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

我会考虑在内存中进行连接,如果你觉得数据集符合内存限制,你只能在一个特殊情况下这样做。

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

答案 1 :(得分:0)

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

Post on Hibernate forums about using Oracle link between two instances