TypeORM关系:仅ID而非整个实例

时间:2020-01-20 21:32:59

标签: foreign-keys relationship typeorm

根据documentation,在TypeORM中,关系定义如下: 用户只有一个配置文件。

import {Entity, PrimaryGeneratedColumn, Column, OneToOne, JoinColumn} from "typeorm";
import {Profile} from "./Profile";

@Entity()
export class User {

    @PrimaryGeneratedColumn()
    id: number;

    @Column()
    name: string;

    @OneToOne(type => Profile)
    @JoinColumn()
    profile: Profile;

}

问题

创建新用户时,为什么我必须传递实体的完整实例(个人资料:个人资料),而不是像往常一样传递一个ID?像这样:

@OneToOne(type => Profile)
    @JoinColumn()
    profileId: number;

没有其他方法吗?

如果您必须对4个外键进行4次查询以获取对应的实例而不是ID,则此过程会导致大量不必要的开销。

我将非常感谢您为解决此问题提供帮助!

1 个答案:

答案 0 :(得分:2)

在TypeORM中,导航字段(此处为profile)可以与普通外键字段(profileId)组合在一起。所以你可以这样写:

@Entity()
export class User {

    @PrimaryGeneratedColumn()
    id: number;

    @Column()
    name: string;

    @OneToOne(type => Profile)
    @JoinColumn()
    profile: Profile;

    @Column()
    profileId: number;

}

然后由您决定是使用实体对象还是仅使用配置文件ID更新关系。