TypeORM:所有权方面如何运作?

问题描述

假设我们有两个模型 ProfileUser

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 上。