我试图搜索我的问题,但找不到任何东西,也许我是错误地处理了该问题。
我正在构建服务中的一个更新功能,该功能包含在REST API的修补程序端点中(使用NestJS),因为这是一个修补程序,所以我要查找的任何字段都是参数,应该在实体中进行更新,到目前为止效果很好。 现在出现了问题,我将其添加到相关模型中。
我拥有的(简化的)模型是:
主要实体正在与之合作:
Organization {
id: number,
name: string;
@OneToMany(() => Offer, (offer: Offer) => offer.organization,
{
cascade: true,
eager: true
})
offers: Offer[]
}
“优惠”模型基本上是“多对多”上的中间表,但由于我希望很快会添加一些其他字段,因此我还是以此方式对其进行了建模
Offer {
id: number,
@ManyToOne(() => Organization, (organization: Organization) => organization.id, {
onDelete: 'CASCADE',
nullable: false
})
@JoinColumn({
name: 'organization_id',
referencedColumnName: 'id'
})
organization: Organization;
@ManyToOne(() => Category, (category: Category) => category.id, {
eager: true,
onDelete: 'CASCADE',
nullable: false
})
@JoinColumn({
name: 'category_id',
referencedColumnName: 'id'
})
@AutoMap()
category: Category;
}
类别仅包含一些信息(甚至没有OneToMany关系设置,因为我现在不担心看到该类别的所有优惠
Category {
id: number,
name: string
}
要编辑组织,我正在使用repository.preload()
使用新的传入更新参数进行预加载,这将加载实体并根据新字段修改值。
但是在嵌套的商品上,它会加载以前存在的商品,以及新添加的(或修改的)商品,即使我传递商品的ID:
因此,如果我的请求正文为:
{
"offers" : [
{
"id": 7, // This one exists
"category_id": 2 // And should modify this category
},
{
"category_id": 3 // this is a new one I'd like to create
}
]
}
我是否过度扩展了preload()
可以实际完成的工作,并且我应该在没有关系的情况下加载实体并分别管理它们吗?还是通过这种方式可以实现?通常如何在Patch端点中编辑嵌套关系?