Tengo dos mesas services y offers . una Oferta puede tener muchos servicios y un servicio puede tener muchas ofertas.
Mi entidad de servicio
@Entity('Services') export class ServiceEntity extends BaseEntity { @PrimaryGeneratedColumn() serviceKey: number; .... @ManyToMany(() => OffersEntity, (offer) => offer.services) @JoinTable({ name: 'offersXservices', inverseJoinColumn: { name: 'offerKey', referencedColumnName: 'offerKey' }, joinColumn: { name: 'serviceKey', referencedColumnName: 'serviceKey', }, }) offers?: OffersEntity[]; }Y la entidad Mis ofertas se define así:
@Entity('Offers') export class OffersEntity extends BaseEntity { @PrimaryGeneratedColumn() offerKey: number; .... @ManyToMany(() => ServiceEntity, (service) => service.offers) @JoinTable({ name: 'offersXservices', inverseJoinColumn: { name: 'serviceKey', referencedColumnName: 'serviceKey' }, joinColumn: { name: 'offerKey', referencedColumnName: 'offerKey', }, }) services?: ServiceEntity[]; } Recibo un error cuando intenté crear un registro de oferta con algunos servicios: la query failed: INSERT INTO "offersXservices"("offerKey", "serviceKey") VALUES (DEFAULT, DEFAULT), (DEFAULT, DEFAULT) error: error: null value in column "offerKey" violates not-null constraint .
No entiendo por qué está pasando esto? en la consulta generada anteriormente, DEFAULT debe reemplazarse con offerKey y serviceKey respectivamente. ¿alguien puede ayudarme en eso?
Aquí está el código que uso para insertar en el registro de oferta.
const _offerEntity = await OffersEntity.create({ vendorKey: input.vendorKey, name: input.name, description: input.description, startAt: input.startAt, expiry: input.expiry, services: await ServiceEntity.find({ where: { serviceKey: In(input.services) } }) }); await queryRunner.manager.save(_offerEntity);Cualquier ayuda sería apreciada :)
PD: la base de datos es postgresql
No encontré una solución adecuada a esta pregunta. Terminé usando consultas sql sin formato con typeorm.
for (const _service of input.services) { await queryRunner.manager.query(`INSERT INTO "offersXservices"("offerKey", "serviceKey") VALUES (${_offerEntity.offerKey}, ${_service})`); }Espero que ayude a alguien.