为什么@ManyToOne的inverseSide在实体保存时没有水合



从默认npx typeorm init项目开始:

@Entity()
export class A {
@PrimaryGeneratedColumn()
id!: number
@OneToMany(() => B, (b) => b.a)
bs: B[]
constructor(bs: B[]) {
this.bs = bs
}
}
@Entity()
export class B {
@PrimaryGeneratedColumn()
id!: number
@ManyToOne(() => A, (a) => a.bs)
a: A
constructor(a: A) {
this.a = a
}
}
AppDataSource.initialize().then(async () => {
const a = await AppDataSource.manager.save(new A([]))
await AppDataSource.manager.save(new B(a))
await AppDataSource.manager.save(new B(a))
await AppDataSource.manager.save(new B(a))
console.log(a.bs.length)
}).catch(error => console.log(error))

这将显示0(a.bs仍然为空(。

我希望a.bs与保存的B的水化。这不是在@ManyToOne上提供逆映射的全部目的吗?

或者,如果我弄错了,维护DB&lt->添加关系实体时的模型一致性?

您的映射定义是正确的。问题是对象a是用bs值的空数组初始化的,因此a.bs.length返回0。

而您随后创建了实体B的多个记录。对象a不知道这些。既然数据库中的一些关系/映射已经更改,Typeorm就不会跟踪或查找项目中的所有实体并刷新它们。为了刷新映射,您需要从数据库中重新加载a

await a.reload();

使得CCD_ 13现在知道更新的映射。

最新更新