Obe*_*roc 11 java database hibernate join
我在两个独立的Oracle数据库(不是模式)中有两个表,我需要在Hibernate中加入.目前,我有两个Hibernate会话进入单独的数据库.在任何人说看看Hibernate Shards之前,我花了一天时间来看看那个子项目并发现:它是针对水平分区数据(所有表必须在所有数据库AFAIK中),有没有办法告诉Shards只能在一个数据库中查看(Hibernate Shards Docs),而且不再使用它.
我曾想过试图解决这个问题的事情:
findAll()在两个表上执行或者某种受限制的变体,并使用一些循环手动执行连接.(对于非常小的桌子来说很好 - 禁止从小桌子上来)
让会话进行某种交互(我不知道这是否可行 - 将不得不查看Hibernate Session API)
从不同的hibernate-xxxx.cfg.xml的URL字符串中删除数据库名称,并将它们插入到单独的hbm.xml文件中,如下所示:(
<class name="foo" table="foo_table" schema="foo_schema" catalog="foo_db">
似乎从我的初始测试中看起来并不像卡车大小的安全漏洞)
使用存储库模式(如果我的Java-Fu足够强大,则不确定)
在上面的一个案例中是否有我忽略的东西,或者它是我上面未列出的另一种方式?
不幸的是,你有几个问题。
从根本上来说,数据库仅擅长/高性能地连接同一数据库中的表。有多种方法可以跨数据库连接,但如果两个表的大小都很大,这可能会成为问题,并且性能可能会受到影响。在谷歌上搜索“oracle join across database”,您会发现一些关于如何执行此操作的指示,但这涉及到 Oracle 创建从一个数据库到另一个数据库的虚拟链接。
我会考虑在内存中进行连接,如果您愿意的话,数据集将适合内存限制,并且您只在一种特殊情况下执行此操作。
如果您需要在这两个数据库之间进行不同的联接,那么我会寻求更永久的解决方案,例如上面的 Oracle 链接。