Выполнение объединения более 2 таблиц в разных базах данных с использованием Hibernate - PullRequest
11 голосов
/ 24 августа 2010

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

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

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

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

  • Удаление имени базы данных из строки URL другого файла hibernate-xxxx.cfg.xml и вставка их в отдельные файлы hbm.xml, например:
    <class name="foo" table="foo_table" schema="foo_schema" catalog="foo_db">
    (Судя по моим первоначальным тестам, это не сработало, и это похоже на дыру в безопасности грузовика)

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

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

Ответы [ 2 ]

3 голосов
/ 24 августа 2010

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

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

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

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

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

0 голосов
/ 24 августа 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...