为啥 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>'”