NestJS中如何按现有语法定义OneToMany实体关联?
解决NestJS+TypeORM中OneToMany关联配置问题
我来帮你搞定这个OneToMany关联的配置,其实TypeORM的双向关联需要两端配合,你已经有了ManyToOne的基础,只需要补全OneToMany的反向关联配置就行。
首先,先给你补全MainEntity里的OneToMany代码,你之前的尝试只差了反向关联的字段指向:
import {Entity,Column, PrimaryColumn, ManyToOne,JoinColumn,OneToMany} from "typeorm"; import { Account } from "./account.entity"; import { Balance } from "./balance.entity"; import { BaseEntity } from "./base.entity"; @Entity() export class MainEntity extends BaseEntity { @PrimaryColumn({ type: "varchar", name: "id", unique: true }) id: string; @ManyToOne(() => Account, { nullable: true }) @JoinColumn({ name: "account_id", referencedColumnName: "id" }) account: Account; // 这里就是你要的OneToMany关联配置 @OneToMany(() => Balance, (balance) => balance.paymentDevice, { // 可选配置:比如 cascade 自动保存关联实体,按需添加 cascade: true, nullable: true }) balances: Balance[]; }
关键说明:
OneToMany的第二个参数是反向关联的字段,也就是你提到的Balance实体中的paymentDevice字段,必须用箭头函数指向它,这样TypeORM才能识别双向关联的对应关系。- 第三个参数是可选配置项,比如
cascade可以让你在保存MainEntity时自动保存关联的balances数组,nullable允许该关联为空,你可以根据业务需求调整。
接下来,你还需要确保Balance实体中对应的ManyToOne配置正确(这是双向关联的必要部分),示例代码如下:
import { Entity, Column, ManyToOne, JoinColumn } from "typeorm"; import { MainEntity } from "./main.entity"; @Entity() export class Balance { // 假设你已有其他字段,这里只展示关联部分 @ManyToOne(() => MainEntity, (main) => main.balances) @JoinColumn({ name: "main_entity_id", referencedColumnName: "id" }) paymentDevice: MainEntity; }
为什么要这样配置?
TypeORM的双向关联需要两端互相指向:
MainEntity的OneToMany指向Balance的paymentDeviceBalance的ManyToOne指向MainEntity的balances
这样不管你从MainEntity查询关联的balances,还是从Balance查询关联的paymentDevice,TypeORM都能正确映射数据库关系。
内容的提问来源于stack exchange,提问作者user186141
相关产品推荐
相关产品推荐

