首页 > 解决方案 > 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, 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;
    
}

我想在这两个模型之间建立双向关系并且它可以工作,我可以从中找到ProfileUser反之亦然。但是,当我跑步SHOW CREATE TABLE profile时,没有任何User模型参考!那么它是如何工作的呢?如何UserProfile侧面找到加入?

是否影响性能哪一方是所有者?如果没有,考虑放在哪一边有什么意义@joinColumn

标签: sqltypescriptforeign-keysrelational-databasetypeorm

解决方案


如您所见,数据库中的用户定义没有对 Profile 的引用,因为@JoinColumn用户表上没有。它@JoinColumn定义了数据库中的外键关系。用于我的@OneToOneTypeOrm 生成元数据和查询,但它不影响数据库模式。

注意:您只能@JoinColumn在关系的一侧拥有。

如果是真正的一对一关系,那么放在哪一边都没有关系@JoinColumn

如果配置文件行可能没有匹配的用户行,则@JoinColumn必须在用户上。


推荐阅读