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

标签 sql typescript foreign-keys relational-database 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;
    
}

我想在这两个模型之间建立双向关系并且它可以工作,我可以从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/

相关文章:

mysql - 是否可以在 SQL 中 LEFT JOIN @variable 表

angular - HostListener 分析组合按键

javascript - 使用参数执行 Promise.all

c# - 在移动服务数据库上启用代码优先迁移时出错

sql - 查询子串形成

SQL Server 小数精度

javascript - 如何通过nodejs使用TypeScript编译器?

mysql - Laravel 5.2 Eloquent 关系

sql - 如何插入具有关系的表?

php - 教义2.0 |创建数据库 |外键是否唯一