【发布时间】:2020-10-29 14:42:55
【问题描述】:
这不是一个特定的编码问题 - 更多的是一般性问题。我在文档中找不到单方面的答案。
假设我们有一个名为 Invoice 的实体,其中包含许多 LineItem 实体,我使用ManyToOne() 和OneToMany() 进行设置,如文档所述。此外,我们确保在 OneToMany() 装饰器选项中包含 cascade: true。
现在,让我们创建一个包含 2 个 LineItem 的 Invoice 对象。如果我保存此 Invoice,TypeORM 会正确级联并将它们自动保存到数据库中 - 一切正常;我只需要 1 行代码就可以将 3 行保存到数据库中。
现在,假设我从数组中删除其中一个 LineItem 并重新保存 Invoice。在这种情况下,TypeORM 会抛出如下所示的错误:
QueryFailedError: ER_BAD_NULL_ERROR: Column 'invoice_line_item_id' cannot be null
这个错误对我来说很清楚:我假设 TypeORM 理解这个 LineItem 不再与 Invoice 关联,但不是删除 LineItem(这是我希望 TypeORM 做的),而是尝试更新行并将外键 invoice_line_item_id 设置为 null。自然,这个外键是不能为空的,所以mysql会报错。
我如何告诉 TypeORM 删除这一行?我是否必须使用repository.remove() 手动删除孩子?我需要删除isNullable: false 吗? (不理想)
谢谢!
【问题讨论】:
标签: nestjs one-to-many typeorm