2013-04-19 6 views
0

Я новичок в Java Enterprise и JPA (используя EclipseLink JPA 2.0 от Netbeans). Я пытаюсь реализовать связь между различными классами @Entity в разных проектах и ​​пакетах, без каких-либо успехов.@Entity Отношение между таблицами в разных базах данных

В базе данных D1 имеется таблица T1 и таблица ссылок T2 синонима T2 в базе данных D2.

Таким образом я создать 2 проектов (Фляг):

D1-JPA, содержащий @Entity package1.T1.class и persistence.xml (отображение также T2)

D2-JPA, содержащий @Entity package1.T2 .class и persistence.xml

Мне нужно создать @OneToOne соотношение от Т1 до Т2, так что T1 имеет

@OneToOne

общественности T2 t2;

Проблема заключается в том, когда я пытаюсь выполнить простой JPQL запрос:

ВЫБЕРИТЕ т от Т1 т

Переведенный запрос что-то вроде

ВЫБОР t.field1, t.field2, T2_t2 FROM T1 t; - "T2_t2" ??

, когда я ожидал чего-то, как SELECT, t1.field1, t1.field2, t2.field1 FROM T1 T1, T2 t2

WHERE (условие соединения)

Что ваши решения проблемы? Что, если синоним на D1 имеет разные имена из реальной таблицы на D2 (синоним TT2, ссылающийся на T2 на D2 ...)?

Относительно всех.

F.

+0

«С композитными блоками настойчивости: Mapping отношение может быть установлено между любыми объектами в композите. " Это выглядит отлично, но это то же самое (как, например, performace), как объединение таблиц с использованием синонимов от одного db к другому? –

ответ

1

@OneToOne в чистом JPA работает только тогда, когда цель является объектом в этой инерционности устройства. Поскольку вы не получаете исключений, тогда он работает так, как будто оба они могут быть найдены и обработаны загрузчиком класса единиц хранения D1. Отображение по умолчанию для поля внешнего ключа T1-> T2 означает «T2_t2», вероятно, потому, что ваш объект T2 имеет поле t2 или свойство, помеченное как его идентификатор. Вам нужно будет указать столбец соединения в отношении, если вы хотите использовать другой столбец базы данных в качестве внешнего ключа.

Я не понимаю вашу цель, так как T1 должен иметь возможность импортировать T2, поэтому они не являются полностью отдельными - таблицы должны быть в одной и той же базе данных, так как между ними должно быть 1: 1. Но вы можете выполнить объединение нескольких блоков сохраняемости и использовать их в качестве одной с единичным сохранением функции составной в EclipseLink описано здесь http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Advanced_JPA_Development/Composite_Persistence_Units

+0

Вы правы Это на самом деле отношение ManyToOne (D1 - это база данных, объединяющая людей и D2, содержащая Докторов, у человека есть один Доктор, Доктор много людей). Я изменил его на OneToOne, чтобы упростить пример, но я был неправ. Возможно, в реальном коде отношение OneToOne не работает, как вы сказали. Я буду следить за предоставленной ссылкой, спасибо. С уважением. –

Смежные вопросы