У меня есть две таблицы в двух отдельных базах данных Oracle (не схемах), которые мне нужно объединить в Hibernate . В настоящее время у меня есть две сессии Hibernate, выходящие в отдельные базы данных. Прежде чем кто-либо скажет, посмотрите на Осколки гибернации , Я потратил большую часть дня на изучение этого подпроекта и обнаружил, что: он предназначен для данных с горизонтальным разделением (все таблицы должны быть во всех базах данных AFAIK), и у одного из них нет возможности сказать Шарду: искать только в одной базе данных ( Hibernate Shards Docs ), и над ней больше не работают.
Вещи, о которых я думал, чтобы попытаться решить эту проблему:
Выполнение findAll ()
или некоторый ограниченный вариант этого в обеих таблицах, и вручную выполняем объединение, используя несколько циклов. (Хорошо для очень маленьких таблиц - запрещено для маленьких таблиц и выше).
Пусть сеансы выполняют какое-то взаимодействие (я понятия не имею, если это вообще возможно - придется взглянуть на Hibernate Session API)
Удаление имя базы данных из строки URL другого файла hibernate-xxxx.cfg. xml и вставьте их в отдельные файлы hbm.xml следующим образом:
(похоже, не работает из моих начальных тестов, и это похоже на дыру в безопасности грузовика)
Используйте шаблон репозитория (не уверен, достаточно ли силен мой Java-Fu)
Есть ли что-то, что я пропускаю в одном из случаев выше или могу это еще один способ, который я не перечислил выше?
У меня нет опыта делать это самому, но я знаю, что Oracle поддерживает "связи" между двумя отдельными экземплярами баз данных. Может быть, эта статья поможет вам?
Сообщение на форумах Hibernate об использовании связи Oracle между двумя экземплярами
К сожалению, у вас есть пара проблем.
По сути, БД хороши / производительны только при объединении таблиц которые находятся в той же базе данных. Существуют способы объединения баз данных, но если размер обеих таблиц велик, это может быть проблемой, и производительность может пострадать. Поищите в Google "соединение оракула через базу данных", и вы найдете несколько указателей о том, как это сделать, но это включает в себя возиться с Oracle, чтобы создать виртуальную ссылку от одной БД к другой.
Я бы подумал о том, чтобы выполнить соединение в памяти, если вам удобно, что набор данных будет соответствовать ограничениям памяти, И вы делаете это только в одном особом случае.
Если вам нужно выполнить разные соединения между этими двумя базами данных, я бы выбрал более постоянное решение, например, указанное выше соединение Oracle.