У меня следующая ситуация:Grails внешнего ключа ошибка удаления родительской строки
class Receipt {
BigDecimal totalAmount;
Date releaseDate;
@NotNull
Integer vatPercentage;
@NotNull
Integer discount;
Boolean isPayed;
Boolean isInvoice;
Boolean hasStampDuty;
Integer documentNumber;
@NotNull
static belongsTo = [patient:Patient, doctor:Doctor]
@NotNull
static hasMany = [healthServices:Receipt_HealthService]
static constraints = {
healthServices(blank: false)
patient(blank: false)
totalAmount(blank: false,)
vatPercentage(blank: false, nullable: false)
}
}
class HealthService {
int vat;
String description;
BigDecimal price;
static belongsTo = [healthServiceType:HealthServiceType, doctor:Doctor]
static constraints = {
healthServiceType(blank: false)
vat(size: 11..11)
description(maxSize: 255)
}
}
class Receipt_HealthService {
Receipt receipt
HealthService healthService
int quantity = 1
static constraints = {
}
}
Я вручную создал класс домена Receipt_HealthService, как описано в посте here. Все работает хорошо, но когда я пытаюсь удалить экземпляр квитанции, я вижу следующее сообщение об ошибке:
Cannot delete or update a parent row: a foreign key constraint fails
(`my_localdb`.`receipt_health_service`, CONSTRAINT
`FK96DE98B9D3292D2C` FOREIGN KEY (`receipt_id`) REFERENCES `receipt`(`id`))
Почему это произошло? Почему экземпляры Receipt_HealthService не удаляются автоматически? Что мне нужно изменить, чтобы разрешить автоматическое удаление и удалить ошибку?
Спасибо! Введите свойство Добавить поле в таблицу Receipt? – FrancescoDS
Поле? Я так не думаю. Семантика для доступа к отношениям с обеих сторон будет одинаковой (receipt.healthServices и receipt_HealthService.receipt). DB мудрый он также должен быть таким же: receipt_health_service должен иметь FK, называемый receipt_id. – Deigote