W modelu domeny mojej aplikacji Grails 2.5.0 mam dwie klasy Income
i Benefit
, które mają identyczne właściwości. Chciałbym przechowywać je w oddzielnych tabelach bazy danych, ale przenieść wspólne pola do klasy bazowej. Model mam wymyślić to:dziedziczenie w domenie Grails powoduje duplikaty kluczy obcych
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
}
}
Powoduje to poniższe tabele mają być generowane dla relacji między Assessment
i Benefit
Tabele stworzone dla relacji między Assessment
i Benefit
są (nieoczekiwanie) identyczne.
Zamiast posiadające assessment_benefit
dołączyć tabelę między assessment
i benefit
, wolałbym mieć assessment_id
klucz obcy w tabeli benefit
, eliminując w ten sposób potrzebę tabeli sprzężenia.
Jak mogę zmienić swój model domeny, aby to osiągnąć?
Jaka jest wersja Grails używane? Użyłem Grails 2.4.4 i użyłem podanych przez ciebie klas domen, tj. Assessment, Benefit, Income i IncomeSource. Nie utworzyło dodatkowej tabeli dołączania, o czym wspomniałeś. I dodał "assessment_id" w tabelach benefit, income i income_source. Łatwo więc sprawdzić, czy podajesz wersję Grails, której używasz w tych przykładach. – Ramsharan
Używam Grails 2.5.0 –
Czy to działa jak pokazano w odpowiedzi? – dmahapatro