nodejs typeorm @onetomany @manytoone с присоединяемой таблицей - PullRequest
0 голосов
/ 28 сентября 2018

У меня есть 2 объекта в nodejs, typeORM в отношении "один ко многим".Есть 3-я таблица отношений, которая содержит связь между двумя объектами.

@Entity({
    name: 'meeting_entity',
})
export class MeetingEntity {

    @PrimaryColumn()
    id: string;

    @OneToMany(type => CaseExtensionEntity, caseExtensionEntity => caseExtensionEntity.id, {cascade: true})
    @JoinTable({
        name: 'meeting_entity_cases',
        joinColumns: [
            {
                name: 'meeting_entity_id'
            }
        ],
        inverseJoinColumns: [
            {
                name: 'cases_id'
            }
        ]
    })
    cases: CaseExtensionEntity[];
}


@Entity({
    name: 'case_extension_entity'
})
export class CaseExtensionEntity {

    @PrimaryColumn()
    id: string;

    @ManyToOne(type => MeetingEntity, meetingEntity => meetingEntity.cases)
    meetingEntity: MeetingEntity;
}

И у меня есть 3 таблицы в postgres:

CREATE TABLE test.case_extension_entity
(
  id character varying(255) NOT NULL,
  CONSTRAINT case_extension_entity_pkey PRIMARY KEY (id)
)

CREATE TABLE test.meeting_entity
(
  id character varying(255) NOT NULL,
  CONSTRAINT meeting_entity_pkey PRIMARY KEY (id)
)

CREATE TABLE test.meeting_entity_cases
(
  meeting_entity_id character varying(255) NOT NULL,
  cases_id character varying(255) NOT NULL,
  cases_order integer NOT NULL,
  CONSTRAINT meeting_entity_cases_pkey PRIMARY KEY (meeting_entity_id, cases_order),
  CONSTRAINT meeting_entity_cases_cases_id_fkey FOREIGN KEY (cases_id)
      REFERENCES test.case_extension_entity (id) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION,
  CONSTRAINT meeting_entity_cases_meeting_entity_id_fkey FOREIGN KEY (meeting_entity_id)
)

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

ошибка: столбец CaseExtensionEntity.meeting_entity_id не существует

Сохранение объекта:

await getManager().transaction(async transactionalEntityManager => {
        await transactionalEntityManager.save(meetingEntity);
    });

Когда я удаляю элемент @ManyToOne из CaseExtensionEntity, тогда он работаети он сохраняет и CaseExtensionEntity, и MeetingEntity, но в третьей таблице ничего нет (meeting_entity_cases).Но я хочу сохранить связь между meeting_entity и case_extension_entity и meeting_entity_cases.

Не могли бы вы помочь мне в этом, пожалуйста?Чего мне не хватает?Я провел 2-й день в Google безуспешно.

Редактировать: У меня есть эта устаревшая структура базы данных, которая используется другим приложением.Переход на @ManyToMany с обеих сторон решил мою проблему.Возможно (если вы остаетесь в здравом уме), вам не нужна третья таблица отношений для отношений OneToMany.

...