我正在尝试使用 TypeORM 在我的 NestJS 应用程序中的两个实体(令牌和用户)之间建立一对多关系。我定义了实体,如下所示:
对于Token实体:
@Entity('tokens')
export default class Token {
@PrimaryGeneratedColumn('uuid')
id: string;
@Column({ unique: true, nullable: false })
token: string;
@ManyToOne(() => User, (user) => user.tokens)
@JoinColumn({ name: 'user' })
user: User;
@Column({ unique: true, nullable: false })
@Generated('uuid')
refreshToken: string;
@CreateDateColumn()
createdAt: Date;
@UpdateDateColumn()
updatedAt: Date;
}
用户实体:
@Entity('users')
export default class User {
@PrimaryGeneratedColumn('uuid')
id: string;
@Column({ unique: true, nullable: false })
mobileNumber: string;
@Column({ length: 25, nullable: true })
firstName: string;
@Column({ length: 25, nullable: true })
lastName: string;
@Column('json', { nullable: false })
secret: any;
@OneToMany(() => Token, (token) => token.user)
@JoinColumn({ name: 'tokens' })
tokens: Token[];
@CreateDateColumn()
createdAt: Date;
@UpdateDateColumn()
updatedAt: Date;
}
但是,当我尝试运行代码时,遇到以下错误:
[Nest] 51035 - 07/17/2023, 8:11:20 PM ERROR [TypeOrmModule] Unable to connect to the database. Retrying (1)...
QueryFailedError: foreign key constraint "FK_2b37c2056a01602dbc597d716e8" cannot be implemented
我不确定是什么原因导致了这个问题,如果能提供解决此问题的帮助,我们将不胜感激。
我只是想在代币和用户之间建立一对多的关系。 谢谢!
可能为时已晚,但我认为问题是关系的“一”侧的
@JoinColumn()
装饰器。从 Token 方面来看,很明显,@JoinColumn("user")
将转换为名为“user”的列,其中将保存用户的 ID。这是数据库需要了解的有关此关系的所有内容,不需要用户端的列。 user.tokens
是一个ORM抽象,它不作为列存在。
要了解有关违反约束的更多信息,您可以连接到数据库并检查表约束,或者 - 如果您正在使用迁移 - 生成迁移并查看它是如何声明的。