node.js - Kan inte implementera främmande nyckelbegränsning i en en-till-många-relation i NestJS med TypeORM
Jag försöker etablera en en-till-många-relation mellan två entiteter (Token och User) i min NestJS-applikation med hjälp av TypeORM. Jag har definierat entiteterna som visas nedan:
För Token-enheten:
@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;
}
Och användarentiteten:
@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;
}
Men när jag försöker köra koden stöter jag på följande fel:
[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
Jag är inte säker på vad som orsakar detta problem och all hjälp med att felsöka detta skulle uppskattas mycket.
Jag försöker helt enkelt ha en en-till-många-relation mellan Tokens och Användare. Tack!
Svar #1
Det kan vara för sent, men jag antar att problemet är @JoinColumn() dekoratorn på "One" sidan av relationen. Från Token-sidan är det tydligt att @JoinColumn("user") kommer att översättas till en kolumn som heter "user" som kommer att hålla användarens ID. Detta är allt databasen behöver veta om denna relation, ingen kolumn på User-sidan krävs. user.tokens är en ORM-abstraktion, den existerar inte som en kolumn.
För att lära dig mer om den kränkta begränsningen kan du antingen ansluta till databasen och undersöka tabellbegränsningarna, eller - om du använder migrationer - generera en migration och se hur den deklareras.