Кросс-базы данных объединяются в JPA - PullRequest
4 голосов
/ 02 мая 2011

Можно ли выполнять кросс-таблицы таблиц в JPA?

У меня есть таблица users в одной базе данных, у которой есть внешний ключ к таблице organizations в отдельной базе данных.Обе базы данных находятся на одной физической машине.Теперь MySQL позволяет мне писать запросы, охватывающие несколько баз данных, но я не уверен, как это сделать с JPA.

@Entity аннотации на Java POJO не принимают имя базы данных,нет способа пометить взаимосвязь между БД.

Есть ли обходной путь для этой ситуации?Возможно, используя собственный запрос для загрузки объединенной сущности?

Ответы [ 3 ]

4 голосов
/ 02 мая 2011

Если MySQL позволяет вам писать SQL, который запрашивает всю базу данных, вы можете использовать этот SQL в собственном Запросе в JPA.

Я полагаю, вы используете какой-то механизм связывания базы данных? Если это так, то вы также сможете отобразить это. Вы можете установить "схему" в @Table связанной базы данных на имя ссылки.

т.е.

@Table(name="organizations", schema="org_schema@org_db")
4 голосов
/ 02 мая 2011

Вы не можете.Поскольку каждая сущность связана с постоянным контекстом, а контекст связан с базой данных.

Если под базами данных вы имеете в виду схемы на одном сервере, вы можете сделать 2 вещи

  • создатьпосмотреть на одну из схем, указывая на таблицу на другой схеме.Недостатком является то, что вам может потребоваться сопоставить сущность дважды (по одному разу для каждой схемы)
  • Создать представление с объединением и отобразить из него все необходимые значения.Недостатком является то, что объект будет доступен только для чтения.

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

Один вопросдля тебя.Упомянутый вами "внешний ключ" является реальным внешним ключом БД или логическим FK?

2 голосов
/ 29 сентября 2011

Мы опробовали следующий подход и, похоже, работаем.

1) Нет атрибута схемы в аннотациях @Table

2) создавать различные файлы orm для сущностей, объединенных схемой, в которой они присутствуют.

3) В каждый из файлов orm можно добавить «my_schema».

4) Включите файлы orm в соответствующие PU в файле persistence.xml

5) Если вы хотите, чтобы во время тестов использовались разные базы данных, создайте аналогичные файлы orm для теста, измените значение в схеме соответствующим образом и включите эти файлы orm в отдельный PU

НТН

...