Выполнение объединения двух таблиц в разных базах данных с использованием Hibernate

У меня есть две таблицы в двух отдельных базах данных Oracle (не схемах), которые мне нужно объединить в Hibernate . В настоящее время у меня есть две сессии Hibernate, выходящие в отдельные базы данных. Прежде чем кто-либо скажет, посмотрите на Осколки гибернации , Я потратил большую часть дня на изучение этого подпроекта и обнаружил, что: он предназначен для данных с горизонтальным разделением (все таблицы должны быть во всех базах данных AFAIK), и у одного из них нет возможности сказать Шарду: искать только в одной базе данных ( Hibernate Shards Docs ), и над ней больше не работают.

Вещи, о которых я думал, чтобы попытаться решить эту проблему:

  • Выполнение findAll () или некоторый ограниченный вариант этого в обеих таблицах, и вручную выполняем объединение, используя несколько циклов. (Хорошо для очень маленьких таблиц - запрещено для маленьких таблиц и выше).

  • Пусть сеансы выполняют какое-то взаимодействие (я понятия не имею, если это вообще возможно - придется взглянуть на Hibernate Session API)

  • Удаление имя базы данных из строки URL другого файла hibernate-xxxx.cfg. xml и вставьте их в отдельные файлы hbm.xml следующим образом:

    (похоже, не работает из моих начальных тестов, и это похоже на дыру в безопасности грузовика)

  • Используйте шаблон репозитория (не уверен, достаточно ли силен мой Java-Fu)

Есть ли что-то, что я пропускаю в одном из случаев выше или могу это еще один способ, который я не перечислил выше?

11
задан bluish 8 April 2013 в 07:44
поделиться

2 ответа

У меня нет опыта делать это самому, но я знаю, что Oracle поддерживает "связи" между двумя отдельными экземплярами баз данных. Может быть, эта статья поможет вам?

Сообщение на форумах Hibernate об использовании связи Oracle между двумя экземплярами

0
ответ дан 3 December 2019 в 12:04
поделиться
​​

К сожалению, у вас есть пара проблем.

  • Hibernate не поддерживает объединение нескольких «физических» экземпляров базы данных
  • Изначально большинство баз данных не поддерживает объединение нескольких «физических» экземпляров базы данных

По сути, БД хороши / производительны только при объединении таблиц которые находятся в той же базе данных. Существуют способы объединения баз данных, но если размер обеих таблиц велик, это может быть проблемой, и производительность может пострадать. Поищите в Google "соединение оракула через базу данных", и вы найдете несколько указателей о том, как это сделать, но это включает в себя возиться с Oracle, чтобы создать виртуальную ссылку от одной БД к другой.

Я бы подумал о том, чтобы выполнить соединение в памяти, если вам удобно, что набор данных будет соответствовать ограничениям памяти, И вы делаете это только в одном особом случае.

Если вам нужно выполнить разные соединения между этими двумя базами данных, я бы выбрал более постоянное решение, например, указанное выше соединение Oracle.

3
ответ дан 3 December 2019 в 12:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: