Генерация классов из базы данных Postgress с несколькими схемами с использованием Cayenne - PullRequest
0 голосов
/ 28 мая 2018

У меня есть база данных PostgreSQL с несколькими схемами, и я использую Apache Cayenne для генерации классов Java.Проблема в том, что cayenne пропускает внешние ключи для таблиц в разных схемах.Пример:

Таблица schema_b.booking, которая ссылается на schema_a.my_user:

create table schema_b.booking
(
    id bigserial not null constraint booking_pkey primary key,
    address_id integer not null constraint cde_fk references schema_b.address
    ...,
    created_by integer not null constraint abc_fk references schema_a.my_user
);

Сгенерированный класс Java выглядит следующим образом:

class Booking {
     private Long id; 
     private Address addressId; //this is OK
     private Integer createdBy; //NOT OK (Integer instead of MyUser)
}

Журнал консоли показывает эту запись для каждого FKв другой схеме:

[INFO] Skip relation: 'null.schema_a.my_user.id <- null.schema_b.booking.created_by # 1' because it related to objects from other catalog/schema
[INFO]      relation primary key: 'null.schema_a'
[INFO]        primary key entity: 'null.schema_a'
[INFO]      relation foreign key: 'null.schema_b'
[INFO]        foreign key entity: 'null.schema_b'

Проблема в том, что Booking#createdBy не MyUser.

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

1 Ответ

0 голосов
/ 30 мая 2018

Вы правы, Cayenne просто пропускает взаимосвязи между схемами.Это выглядит как устаревшее ограничение, которое должно быть удалено.

Если вы делаете это только один раз, вы можете просто добавить эти отсутствующие отношения в Cayenne Modeler.Если вам нужно периодически синхронизировать модель Cayenne с вашей БД, преодолеть ее будет сложнее.Один из вариантов - вообще пропустить загрузку отношений ( см. Документы ) и создать их вручную (или с помощью инструмента "Infer Relations" в Modeler).В этом случае весь другой контент (таблицы и столбцы) должен синхронизироваться очень хорошо.Другой вариант - дождаться 4.1.M2 версии Cayenne, которая, я думаю, будет готова в ближайшее время (точных дат пока нет)

...