[英]TypeOrm update Entity not updating related one
我有这个实体:
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column()
email: string;
@Column()
password: string;
@Column({ default: false })
activated: boolean;
@OneToOne(() => UserAnag, (userAnag) => userAnag.user)
useranag: UserAnag;
}
和这个相关实体
@Entity()
export class UserAnag {
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
@Column()
surname: string;
@OneToOne(() => User, (user) => user.useranag, {
onUpdate: 'CASCADE',
onDelete: 'CASCADE',
})
@JoinColumn()
user: User;
这是我的更新 function:
async update(id: number, attrs: Partial<UpdateUserDto>) {
const user = await this.findById(id);
if (!user) {
throw new NotFoundException('User not found');
}
if (attrs.useranag) {
const useranag = Object.assign(user.useranag, attrs.useranag);
Object.assign(user, attrs);
user.useranag = useranag;
} else {
Object.assign(user, attrs);
}
return this.repo.save(user);
}
我的 findById function
if (!id) {
return null;
}
const user = await this.repo.find({
where: { id: id },
relations: { useranag: true },
});
return user[0];
}
如果我对此进行调试,我可以看到userEntity已正确更新,并且返回也已更新正确的 object 但在数据库上,只有User实体已正确更新,而不是 Useranag 实体。 我尝试在 Useranag 上设置 eager 但遇到同样的问题。 数据库仅在 User 中更新,而不在 Useranag 中更新
附加信息:我正在记录查询,在更新之前,select 只有 useranag 实体上的 id 和 userId 明显等于原始并且没有启动更新查询
级联语法不同。 您可以将其设置为cascade: true
或要级联的操作列表
@OneToOne(() => User, (user) => user.useranag, {cascade: true})
@JoinColumn()
user: User;
@OneToOne(() => User, (user) => user.useranag, {cascade: ['update', 'delete']})
@JoinColumn()
user: User;
资料来源: https://orkhan.gitbook.io/typeorm/docs/relations#cascades
我已经解决了这个问题。 我混淆了 onUpdate 和 cascade: ['update']
我发现更新相关实体的正确方法是在我要更新的实体中设置cascade: ['update']
,而不是在相关实体中。
所以正确的代码是:
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column()
email: string;
@Column()
password: string;
@Column({ default: false })
activated: boolean;
@OneToOne(() => UserAnag, (userAnag) => userAnag.user, {
cascade: ['update'],
})
useranag: UserAnag;
}
和
@Entity()
export class UserAnag {
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
@Column()
surname: string;
@Column()
psn: string;
@Column()
discord: string;
@Column()
drivernumber: number;
@OneToOne(() => User, (user) => user.useranag, {
onDelete: 'CASCADE',
})
@JoinColumn()
user: User;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.