假设我们有两个模型 Profile
和 User
:
import {Entity, PrimaryGeneratedColumn, Column, OneToOne} from "typeorm";
import {User} from "./User";
@Entity()
export class Profile {
@PrimaryGeneratedColumn()
id: number;
@Column()
gender: string;
@Column()
photo: string;
@OneToOne(() => User, user => user.profile) // specify inverse side as a second parameter
user: User;
}
import {Entity, PrimaryGeneratedColumn, Column, OneToOne, JoinColumn} from "typeorm";
import {Profile} from "./Profile";
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
@OneToOne(() => Profile, profile => profile.user) // specify inverse side as a second parameter
@JoinColumn()
profile: Profile;
}
我想在这两个模型之间建立双向关系并且它可以工作,我可以从User
找到Profile
,反之亦然。但是,当我运行 SHOW CREATE TABLE profile
时,没有任何对 User
模型的引用!那么它是如何运作的呢?如何从 Profile
端找到加入User
?
哪一方是所有者,会影响性能吗?如果不是,那么考虑将 @joinColumn
放在哪一边有什么意义?
最佳答案
正如您所发现的,数据库中的用户定义没有引用配置文件,因为用户表上没有@JoinColumn
。 @JoinColumn
定义了数据库中的外键关系。 @OneToOne
用于我的 TypeOrm 生成元数据和查询,但它不会影响数据库架构。
注意:关系的一侧只能有 @JoinColumn
。
如果是真正的一对一关系,则将 @JoinColumn
放在哪一边并不重要。
如果配置文件行可能没有匹配的用户行,则 @JoinColumn
必须位于用户上。
关于sql - TypeORM:所有权方面如何运作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66734753/