我在两个单独的 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足够强大,则不确定)
在上述某个案例中,我有什么东西可以忽略,还是我没有在上面列出的另一种方式?
答案 0 :(得分:3)
不幸的是,你有几个问题。
从根本上说,DB在连接同一数据库中的表时只有良好/高效。有跨数据库加入的方法,但如果两个表的大小都很大,这可能是一个问题,并且性能可能会受到影响。做一些谷歌搜索“oracle join across database”你会发现一些关于如何做到这一点的指针,但它涉及摆弄Oracle创建一个从一个数据库到另一个数据库的虚拟链接。
我会考虑在内存中进行连接,如果你觉得数据集符合内存限制,你只能在一个特殊情况下这样做。
如果您需要在这两个数据库之间进行不同的连接,那么我会寻求更长久的解决方案,例如上面链接的Oracle。
答案 1 :(得分:0)
我自己没有这方面的经验,但我知道Oracle支持两个独立数据库实例之间的数据库“链接”。也许这篇文章会对你有帮助吗?
Post on Hibernate forums about using Oracle link between two instances