我的MySQL数据库中有两个表:
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;
}
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或数据库中的内容时,我陷入了困境。任何可以引导我正确方法的建议都值得欢迎
尝试使用@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;
}