无法在NestJS中使用TypeORM实现一对多关系的外键约束

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

我正在尝试使用 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

我不确定是什么原因导致了这个问题,如果能提供解决此问题的帮助,我们将不胜感激。

我只是想在代币和用户之间建立一对多的关系。 谢谢!

node.js typescript express nestjs typeorm
1个回答
0
投票

可能为时已晚,但我认为问题是关系的“一”侧的

@JoinColumn()
装饰器。从 Token 方面来看,很明显,
@JoinColumn("user")
将转换为名为“user”的列,其中将保存用户的 ID。这是数据库需要了解的有关此关系的所有内容,不需要用户端的列。
user.tokens
是一个ORM抽象,它不作为列存在。

要了解有关违反约束的更多信息,您可以连接到数据库并检查表约束,或者 - 如果您正在使用迁移 - 生成迁移并查看它是如何声明的。

© www.soinside.com 2019 - 2024. All rights reserved.