问题描述
检索父实体“User”时,我可以添加和更新一对多相关实体“AdminUserGroup”。但是,当子实体“AdminUserGroup”从父“User”中删除时,什么也没有发生。
子对象中的外键没有设置为空,也没有删除记录。
我使用 postgres 作为数据库。
重现步骤
子实体移除方法
async updateUserAdmin(data: UpdateUserAdminDto): Promise<User> {
var user = await this.findById(data.userId);
user.userGroups = null
//i have also tried
//user.userGroups = []
return await this.userRepository.save(user);
}
父实体
@Entity({name: 'users'})
class User implements IUser {
@PrimaryGeneratedColumn()
id: number
@Column()
companyId: number
@Column()
privilegeId: number
@OneToMany(
() => AdminUserGroup,
(userGroup) => userGroup.user, { cascade: true })
userGroups: AdminUserGroup[]
}
子实体
@Entity({ name: 'admin_cost_centers' })
class AdminUserGroup {
@PrimaryGeneratedColumn()
id: number
@ManyToOne(() => User, (user) => user.userGroups, orphanedRowAction: 'delete')
@JoinColumn()
user: User
@ManyToOne(() => Group, (group) => group.userGroups, orphanedRowAction: 'delete')
@JoinColumn()
group: Group
@Column()
startedAt: Date
}
最佳答案
如果父级被删除,级联操作onDelete: CASCADE
会导致子级被删除。由于您不是删除父实体本身,而是使相应子实体中的引用无效,因此级联不适用。
自0.2.33版本起,typeorm支持orphanedRowAction
在子实体上,它允许您指定如果引用即将被删除应该发生什么:
@Entity({ name: 'admin_cost_centers' })
class AdminUserGroup {
@PrimaryGeneratedColumn()
id: number
@ManyToOne(() => User, (user) => user.userGroups, {
// The 'delete' action causes the user group to be deleted
// if it is no longer mapped to a user
orphanedRowAction: 'delete'
})
@JoinColumn()
user: User
@Column()
startedAt: Date
}
关于node.js - 保存和更新不会删除已删除的实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69905731/