'TypeORM upsert entities with OneToMany relationships

I have a few entities created on TypeORM and I want to upsert an array of data with all the entities. Here I have the entities:

@Entity({name: "__sales_rep"})
export class SalesRep {

    @PrimaryColumn()
    ldap: string;

    @Column("text")
    name: string

    @OneToMany(() => ParentCompany, (parent_company) => parent_company.sales_rep, { cascade: ['insert', 'update'] })
    parent_companies: ParentCompany[]
}

@Entity({name: "__parent_company"})
export class ParentCompany {

    @PrimaryColumn()
    id: number;

    @Column("text")
    name: string

    @OneToMany(() => Advertiser, (advertiser) => advertiser.parent_company, { cascade: ['insert', 'update'] })
    advertisers: Advertiser[]

    @ManyToOne(() => SalesRep, (sales_rep) => sales_rep.parent_companies)
    sales_rep: SalesRep
}

@Entity({name: "advertiser"})
export class Advertiser {

    @PrimaryColumn()
    id: number;

    @Column("text")
    name: string

    @ManyToOne(() => ParentCompany, (parent_company) => parent_company.advertisers)
    parent_company: ParentCompany
}

And here is how I am trying to insert the data as cascading the data. I believe the problem is that when I insert two advertisers with the same parent_company for example the constraints of the foreign key aren't allowing me to make the entire insertion.


async function loadData(data) {
    console.log("Beggning data insertion");
    try{
        const insertData = data.rows.map((row) => {
            const currentSalesRep ? {
                ldap: row.ldap,
                name: row.full_name
            },
            currentParentCompany = {
                id: row.parent_company_id,
                name: row.parent_company_name,
                sales_rep: currentSalesRep
            };
            return {
                id: row.advertiser_id,
                name: row.advertiser_name,
                parent_company: currentParentCompany 
            }
        })
        salesRepRepository
        .upsert(insertData, ['id']);
        typeorm
    }
    catch(e){
        logger.error(e)
        throw e;
    }
}


Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source