В модели домена моего приложения Grails 2.5.0 у меня есть два класса Income
и Benefit
, которые имеют одинаковые свойства. Я хотел бы сохранить их в отдельных таблицах базы данных, но переместить общие поля в базовый класс. Модель, которую я придумал это:Наследование в модели домена Grails вызывает дублирование внешних ключей
class Assessment {
Date dateCreated = new Date()
User user
static hasMany = [incomes: Income, benefits: Benefit]
}
class Benefit extends IncomeSource {}
class Income extends IncomeSource {}
abstract class IncomeSource {
String name
BigDecimal amount
PaymentFrequency frequency
static belongsTo = [assessment: Assessment]
static mapping = {
tablePerHierarchy false
}
}
Это приводит следующие таблицы, которые будут созданы для отношений между Assessment
и Benefit
таблицей, созданной для отношений между Assessment
и Benefit
(неудивительно) идентичны.
Вместо имеющий assessment_benefit
таблицу соединения между assessment
и benefit
, я предпочел бы иметь assessment_id
внешний ключ в benefit
таблице, тем самым устраняя необходимость присоединиться к столу.
Как я могу изменить свою модель домена для достижения этой цели?
Что используется версия Grails? Я использовал Grails 2.4.4 и использовал классы домена, предоставленные вами, а именно: оценка, доход, доход и источник дохода. Он не создал дополнительную таблицу соединений, как вы уже упоминали. И она добавила 'valu_id' в таблицы доходов, доходов и доходов. Поэтому было бы легко проверить, предоставили ли вы версию Grails, используемую вами для этих примеров. – Ramsharan
Я использую Grails 2.5.0 –
Работает ли это как показано в ответе? – dmahapatro