TypeORM - MYSQL - аннотация @OneToOne - PullRequest
0 голосов
/ 11 апреля 2020

В моей базе данных MySQL есть две таблицы:

1 Канал таблицы:

CREATE TABLE `channel` (
  `id` int NOT NULL AUTO_INCREMENT,
  `name` varchar(255) COLLATE utf8_bin NOT NULL,
  `youtubeId` varchar(255) COLLATE utf8_bin NOT NULL,
  `language` int NOT NULL,
  `lastUpdatedDate` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `createdDate` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `FK_LANGUAGE` (`language`),
  CONSTRAINT `FK_LANGUAGE` FOREIGN KEY (`language`) REFERENCES `language` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE=utf8_bin

И сущность в TypeOrm выглядит следующим образом:

@Entity()
export class Channel {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  name: string;

  @Column()
  youtubeId: string;

  @OneToOne((type) => Language)
  @Column()
  language: Language;

  @Column()
  lastUpdatedDate: Date;

  @Column()
  createdDate: Date;
}

2 Table Language

CREATE TABLE `language` (
  `id` int NOT NULL AUTO_INCREMENT,
  `name` varchar(45) COLLATE utf8_bin DEFAULT NULL,
  `code` varchar(45) COLLATE utf8_bin DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin

И Entity в TypeORM выглядит следующим образом:

@Entity()
export class Language {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  name: string;

  @Column()
  code: string;
}

ОШИБКА:

Проблема в том, что при запуске моего nodejs сервера я получаю ошибка:

DataTypeNotSupportedError: Тип данных "Language" в "Channel.language" не поддерживается базой данных "mysql".

Я не совсем отлично разбираюсь в базах данных, и я стараюсь изучать TypeORM так, что в настоящее время я нахожусь в ситуации, когда не знаю, испортил ли я что-то в TypeORM или в моей базе данных. Любые советы, которые могут привести меня в правильное русло, более чем приветствуются

1 Ответ

0 голосов
/ 12 апреля 2020

Попробуйте использовать @JoinColumn () вместо @Column ()

@JoinColumn () создаст внешний ключ language_id для таблицы каналов

@Entity()
export class Channel {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  name: string;

  @Column()
  youtubeId: string;

  @OneToOne((type) => Language)
  @JoinColumn()
  language: Language;

  @Column()
  lastUpdatedDate: Date;

  @Column()
  createdDate: Date;
}
...