为啥 TypeORM 需要提供 OneToMany 的反面,但不需要提供 ManyToOne 的反面?

Posted

技术标签:

【中文标题】为啥 TypeORM 需要提供 OneToMany 的反面,但不需要提供 ManyToOne 的反面?【英文标题】:Why does TypeORM require the inverse side of OneToMany to be provided, but doesn't require the inverse side of ManyToOne to be provided?为什么 TypeORM 需要提供 OneToMany 的反面,但不需要提供 ManyToOne 的反面? 【发布时间】:2019-11-20 00:28:10 【问题描述】:

以下引用摘自TypeORM docs:

没有@ManyToOne,@OneToMany 就无法存在。如果要使用@OneToMany,则需要@ManyToOne。但是,不需要相反:如果您只关心 @ManyToOne 关系,则可以在相关实体上不使用 @OneToMany 的情况下定义它。您在哪里设置 @ManyToOne - 它的相关实体将具有“关系 id”和外键。

为什么需要提供 OneToMany 的反面而不提供 ManyToOne?

【问题讨论】:

【参考方案1】:

因为ManyToOne把外键放在了当前实体表中,所以需要SQL表定义生成。毕竟只是一个 SQL 列,归根结底是外键,TypeOrm 需要实体定义,才能正确生成 SQL 语句。

TypeOrm 需要知道外键在哪里来生成列表的 fetch SQL 查询,因此需要 ManyToOne 映射。如果 OneToMany 未定义,则不会获取任何内容,因此它也可以工作。

【讨论】:

以上是关于为啥 TypeORM 需要提供 OneToMany 的反面,但不需要提供 ManyToOne 的反面?的主要内容,如果未能解决你的问题,请参考以下文章

TypeORM OneToMany 导致“ReferenceError:在初始化之前无法访问'<Entity>'”

TypeORM 保存嵌套对象

在 TypeORM 和 NodeJS 中加入表

在 Typeorm 中引用实体的复合主键

NestJS & TypeORM:发布请求中的 DTO 格式

TypeORM postgresql 急切加载关系定义为惰性