1. 介绍
在 TypeORM 中,一对一(One-to-One)关系是一种数据库关系,其中一个表中的每一行只与另一个表中的一行相关联。比如用户和身份证
2. 准备
我们还是将就上节课的项目,不过我们需要把数据库删除了
右键,选择删除

再把之前的代码清除下

然后我们在新建一个实体


现在我们有了两个实体,但是他们之间还没有任何关系,对吧?所以我们还需要给他们建立关系,如图,我们可以通过@JoinColumn和@OneToOne装饰器来指定

我们执行pnpm start




3. crud
3.1. 增

pnpm start

可以看到后面插入 idCard 的时候,已经有 userId 了


可以看到的是,我们上面的保存是不是分别保存的user和idcard,那他们既然都关联了,那我们是不是可以让他自动按照关联关系来保存,当然可以,我们可以在 @OneToOne 那里指定 cascade 为 true


pnpm start

可以看到,他还是先插入user,在生成idcard
3.2. 改
很简单我们在save的时候带上id,就行了


如果我们只有idcard带了id

![]()
他就会新增一个user,修改我们的idcard
3.3. 查
我们来试试我们的find查询


可以看到他只查出了我们的idcard但是没关联出user,如果我们想一起查出来,我们可以声明下 relations 关联查询


还可以写成

3.4. 删
删idcard


删user, 我们来试试删id为2 的user,因为这个是与我们的idcard还有关联关系的对吧,我们设置了外键的 onDelete 是 cascade,我们看看会有什么效果

首先,我们可以看到user表 id为2的已经被删除了

然后我们可以看到idcard中有关联的也删除了

3.5. 通过user查idcard
我们是不是很有可能查用户,并查出他的身份证,这时候我们就需要在user实体中,也建立一个关联关系

这里我们不需要@JoinColumn这个装饰器,因为在idcard中有个外键关联了,所以这里我们只需要通过@OneToOne装饰器 第二个参数告诉 typeorm,外键是另一个 Entity 的哪个属性就行了


![[CSS3]2D与3D变换技术详解](https://img-blog.csdnimg.cn/img_convert/e337d2c193be28382334d0789e7b8663.png)


![【BUU】[Dest0g3 520迎新赛]Really Easy SQL](https://img-blog.csdnimg.cn/img_convert/7a4df6d2916cfcceb82f92b58b4f577c.png)















