【发布时间】:2021-01-01 22:08:03
【问题描述】:
我有一项服务,我试图用关系实体(一对多)保存一个实体。我所拥有的是:
支付实体:
@Entity('payment')
export class PaymentEntity {
@PrimaryColumn()
id: number;
@OneToMany(type => PaymentExamEntity, paymentExam => paymentExam.payment, { cascade: true })
paymentExams: PaymentExamEntity[];
...
}
PaymentExamEntity:
@Entity('payment_exam')
export class PaymentExamEntity {
@PrimaryColumn()
id: number;
@ManyToOne(type => PaymentEntity, payment => payment.paymentExams)
@JoinColumn({name: 'payment_id'})
payment: PaymentEntity;
....
}
支付服务:
@Injectable()
export class PaymentService {
constructor(@InjectRepository(PaymentEntity) private paymentRepo: Repository<PaymentDTO>,
@InjectRepository(PaymentExamEntity) private paymentExamRepo: Repository<PaymentExamDTO>) { }
async create(data: PaymentDTO) {
const payment = this.paymentRepo.create(data);
await this.paymentRepo.save(payment);
for(let item of data.paymentExams){
item.payment = payment;
const paymentExams = this.paymentExamRepo.create(data.paymentExams);
this.paymentExamRepo.save(data.paymentExams);
}
return payment;
}
我可以看到支付实体已保存,但由于缺少外键值,paymentExams 实体未能保存。
[Nest] 11545 - 01/01/2021, 12:15:52 AM [ExceptionsHandler] ER_NO_DEFAULT_FOR_FIELD: Field 'payment_id' doesn't have a default value
问题是付款对象在保存后没有从数据库自动生成的id更新。因此外键的分配为空。有没有其他解决方案。如何存储子实体?
提前致谢
【问题讨论】: