Переопределить ownTo / hasMany в подклассе Grails

У меня есть эти 4 класса:

class Animal {
    static hasMany = [legs: Leg]
}

class Cat extends Animal {
    static hasMany = [legs: CatLeg] // Should I remove this line?
}

class Leg {
    static belongsTo = [animal: Animal]
}

class CatLeg extends Leg {
    static belongsTo = [animal: Cat] // Should I remove this line?
}

Это было бы хорошо? Необходимо или рекомендуется снова объявлять эти переменные в подклассах? Какая разница между их добавлением или пропуском?

В настоящее время я использую Grails 2.2.2.

Спасибо,

Jordi

1 ответ

Решение

Это зависит от ваших настроек Hibernate. По умолчанию в Grails Hibernate отображает иерархию объектов в 1 таблицу (иерархия на таблицу). Это означает, что вам не нужно снова объявлять ссылку в дочерних классах. Слой GORM позаботится о правильном классе (Leg vs. CatLeg).

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

Другие вопросы по тегам