sql - TypeORM:所有权方面如何运作?
问题描述
假设我们有两个模型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, 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;
}
我想在这两个模型之间建立双向关系并且它可以工作,我可以从中找到Profile
,User
反之亦然。但是,当我跑步SHOW CREATE TABLE profile
时,没有任何User
模型参考!那么它是如何工作的呢?如何User
从Profile
侧面找到加入?
是否影响性能哪一方是所有者?如果没有,考虑放在哪一边有什么意义@joinColumn
?
解决方案
如您所见,数据库中的用户定义没有对 Profile 的引用,因为@JoinColumn
用户表上没有。它@JoinColumn
定义了数据库中的外键关系。用于我的@OneToOne
TypeOrm 生成元数据和查询,但它不影响数据库模式。
注意:您只能@JoinColumn
在关系的一侧拥有。
如果是真正的一对一关系,那么放在哪一边都没有关系@JoinColumn
。
如果配置文件行可能没有匹配的用户行,则@JoinColumn
必须在用户上。
推荐阅读
- arduino - Arduino Nano 和模拟操纵杆
- mirth - HTTP Sender 和 REST 约定
- android - ListView 只呈现一项,除非指定高度
- keras - 当我给它 2 时,Keras LSTM 期望 3 维,但当我给它 3 时,它期望 4 维
- excel - 删除所有工作表中的所有列,命名的列除外
- java - Intent ACTION_SEND 不会显示所有浏览器
- php - 未在实时服务器上创建 XML
- c - snprintf:是否有任何 C 标准提案/计划来更改此函数的描述?
- java - 在我的设备上运行应用程序时出现此错误
- python - Python3删除整个嵌套字典