TypeORM-MYSQL-@OneToOne注释

问题描述 投票:0回答:1

我的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表语言

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

TypeORM中的实体看起来像:

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

  @Column()
  name: string;

  @Column()
  code: string;
}

错误:

问题是,一旦启动nodejs服务器,我会收到一个错误:

DataTypeNotSupportedError:“ Channel.language”中的数据类型“ Language”“ mysql”数据库不支持。

我在数据库方面不是很出色,我试图如此循序渐进地学习TypeORM,当我不知道是否弄乱了TypeORM或数据库中的内容时,我陷入了困境。任何可以引导我正确方法的建议都值得欢迎

mysql node.js database express typeorm
1个回答
0
投票

尝试使用@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;
}
© www.soinside.com 2019 - 2024. All rights reserved.