问题描述
假设我们有两个模型 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,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;
}
我想在这两个模型之间建立双向关系并且它有效,我可以从 Profile
找到 User
,反之亦然。但是,当我运行 SHOW CREATE TABLE profile
时,没有任何对 User
模型的引用!那么它是如何工作的呢?如何从 User
方找到加入 Profile
?
请问楼主哪一边影响演出?如果不是,那么考虑将 @joinColumn
放在哪一边有什么意义?
解决方法
如您所见,数据库中的 User 定义没有对 Profile 的引用,因为 User 表中没有 @JoinColumn
。 @JoinColumn
定义了数据库中的外键关系。 @OneToOne
用于我的 TypeOrm 生成元数据和查询,但它不会影响数据库架构。
注意:关系的一侧只能有 @JoinColumn
。
如果是真正的一对一关系,@JoinColumn
放在哪一边都没有关系。
如果 Profile 行没有匹配的 User 行,则 @JoinColumn
必须在 User 上。