TypeORM ManyToMany Juntion table 创建不工作
TypeORM ManyToMany Juntion table create not working
我有两个表 services
和 offers
。一个优惠可以有很多服务,一个服务可以有很多优惠。
我的服务实体
@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[];
}
我的优惠实体定义如下:
@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[];
}
当我尝试使用某些服务创建报价记录时出现错误:query failed: INSERT INTO "offersXservices"("offerKey", "serviceKey") VALUES (DEFAULT, DEFAULT), (DEFAULT, DEFAULT) error: error: null value in column "offerKey" violates not-null constraint
。
我不明白为什么会这样?在上面生成的查询中,DEFAULT
应该分别替换为 offerKey 和 serviceKey。谁能帮我解决这个问题?
这是我用来插入报价记录的代码。
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);
任何帮助将不胜感激:)
PS: 数据库是postgresql
这个问题我没有找到合适的答案。我最终使用带有 typeorm 的原始 sql
查询。
for (const _service of input.services) {
await queryRunner.manager.query(`INSERT INTO "offersXservices"("offerKey", "serviceKey") VALUES (${_offerEntity.offerKey}, ${_service})`);
}
希望对大家有所帮助。
我有两个表 services
和 offers
。一个优惠可以有很多服务,一个服务可以有很多优惠。
我的服务实体
@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[];
}
我的优惠实体定义如下:
@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[];
}
当我尝试使用某些服务创建报价记录时出现错误:query failed: INSERT INTO "offersXservices"("offerKey", "serviceKey") VALUES (DEFAULT, DEFAULT), (DEFAULT, DEFAULT) error: error: null value in column "offerKey" violates not-null constraint
。
我不明白为什么会这样?在上面生成的查询中,DEFAULT
应该分别替换为 offerKey 和 serviceKey。谁能帮我解决这个问题?
这是我用来插入报价记录的代码。
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);
任何帮助将不胜感激:)
PS: 数据库是postgresql
这个问题我没有找到合适的答案。我最终使用带有 typeorm 的原始 sql
查询。
for (const _service of input.services) {
await queryRunner.manager.query(`INSERT INTO "offersXservices"("offerKey", "serviceKey") VALUES (${_offerEntity.offerKey}, ${_service})`);
}
希望对大家有所帮助。