In one to many relationship on typeorm nested entity insertion subscriber on child recieves parent id as undefined.
Parent Entity:
@Entity('masterTemplate')
export class MasterTemplate extends BaseEntity {
@PrimaryGeneratedColumn('uuid') id: string;
@Column({
type: 'varchar',
nullable: false,
unique: false,
})
name: string;
@OneToMany(() => Program, (program) => program.masterTemplate, {
cascade: true,
})
@JoinColumn({ name: 'id', referencedColumnName: 'masterTemplateId' })
program: Program[];
@OneToMany(() => UserProgram, (userProgram) => userProgram.masterTemplate, {
cascade: true,
})
@JoinColumn({ name: 'id', referencedColumnName: 'masterTemplateId' })
userProgram: UserProgram[];
}
Child Entity:
@Entity('program')
@Index(['masterTemplate', 'index'], { unique: true })
export class Program extends BaseEntity {
@PrimaryGeneratedColumn('uuid') id: string;
@Column({
type: 'int4',
nullable: false,
})
index: number;
@Column({
type: 'uuid',
nullable: true,
unique: false,
})
masterTemplateId: string;
@Column({
type: 'varchar',
nullable: false,
unique: false,
})
name: string;
@OneToMany(() => Milestone, (milestone) => milestone.program, {
cascade: true,
})
@JoinColumn({ name: 'id', referencedColumnName: 'programId' })
milestone: Milestone[];
@ManyToOne(() => MasterTemplate, (masterTemplate) => masterTemplate.program, {
orphanedRowAction: 'delete',
onDelete: 'SET NULL',
})
@JoinColumn({ name: 'masterTemplateId', referencedColumnName: 'id' })
masterTemplate: MasterTemplate;
@BeforeInsert()
@BeforeUpdate()
async updateIndex() {
console.log('========================', this.masterTemplateId);
if (!this.index) {
const count = await Program.count({
where: { masterTemplateId: this.masterTemplateId },
});
this.index = count + 1;
}
}
}