#grails #groovy #grails-orm
#grails #groovy #grails-orm
Вопрос:
Итак, у меня есть 2 таблицы в классе домена grails, одна из которых — Customer, а другая — Customer Client.Клиент-клиент имеет внешний ключ Клиента. Вот код для моего клиентского домена:
class Customer {
String code
String name
String contactPerson
String status
static hasOne = [customerClient: CustomerClient]
static constraints = {
status maxSize:8
contactPerson nullable: true
name nullable: false
status nullabale: false
customerClient nullable: true
}
}
и вот код для моего клиентского домена клиента:
package workdatabase4
class CustomerClient {
String zendeskApiToken
String zendeskUrl
String clientChannelId
String clientName
String clientChannel
String status
String zendeskApiAuth
String channelAccessToken
static belongsTo = [customer: Customer]
static constraints = {
clientName nullable: true
}
}
У меня нет функции удаления в моем контроллере, я просто попытался удалить ее вручную через базу данных в intellij, и я получил эту ошибку:
[23000][1451] Cannot delete or update a parent row: a foreign key constraint fails (`customerclient`.`customer_client`, CONSTRAINT `FKgobbh6gqke89v6a7rdsfcdu2o` FOREIGN KEY (`customer_id`) REFERENCES `customer` (`id`))
Мой вопрос в том, как я могу удалить клиента, не удаляя сначала клиента клиента?
Спасибо.
Ответ №1:
Это называется каскадным удалением. Дело в том, что если вы удалите родительскую строку, в базе данных останется множество дочерних строк, которые вы больше не сможете найти.
Я тоже новичок в Grails. Я не уверен, сработает это или нет.
Я гуглю «каскад grails». Google указывает мне на страницу документа grails. В нем есть пример, в котором говорится, что нужно добавить каскадную запись в блок сопоставления с классом домена.
Если это не сработает, вам придется изменить настройку каскадного удаления непосредственно из системы баз данных. База данных может заблокировать удаление родительской строки.
class Author {
static hasMany = [books: Book]
static mapping = {
books cascade: 'all-delete-orphan'
}
}