Grails Delete и Cascading - PullRequest
       13

Grails Delete и Cascading

1 голос
/ 20 июля 2010

У меня есть следующие 3 класса

class User {
 static hasMany = [coupons: Coupon]
}

class Coupon {
 static belongsTo = [affiliate: Affiliate]
}

class Affiliate {
 static hasMany = [coupons: Coupon]
}

Как настроить каскадирование, чтобы я мог удалить определенный купон, и он будет удален из списков в филиалах и пользователях.Я получаю сообщение «Невозможно удалить или обновить родительскую строку»

Я что-то упустил?

Ответы [ 2 ]

4 голосов
/ 20 июля 2010

Вам необходимо удалить купон из родительской коллекции.Вы можете сделать это вручную в службе, где вы удаляете купон, или можете использовать события гибернации для этого.Я не думаю, что вы можете иметь каскад сделать это.Самое близкое, что вы можете получить, это «delete-orphan», но вам все равно нужно разорвать связь, чтобы это работало.

См. Раздел 5.5.1 руководства.

http://grails.org/doc/latest/

По сути, вы можете добавить метод beforeDelete к вашему классу Coupon, который удалит его ссылку из своих родителей.

grails достаточно умен, чтобы запустить метод beforeDelete, как вы уже догадались, до удаления купона.Это хорошее место для разрыва связей.

Независимо от того, делаете ли вы это «вручную» в классе службы или домена или используете события гибернации, код будет практически одинаковым.Убедитесь, что вы написали интеграционный тест для него ...

2 голосов
/ 03 августа 2010

попробуйте добавить это в User

static mapping = {
    cupons cascade: "all-delete-orphan"
}
...