Nel modello di dominio della mia app Grails 2.5.0 ho due classi Income
e Benefit
con proprietà identiche. Vorrei memorizzarli in tabelle di database separate, ma spostare i campi comuni in una classe base. Il modello che è venuta in mente è:nel modello di dominio Grails causa chiavi esterne duplicate
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
}
}
Questo fa sì che le seguenti tabelle da generare per il rapporto tra Assessment
e Benefit
Le tabelle create per il rapporto tra Assessment
e Benefit
sono (non sorprendentemente) identici.
Invece di avere un assessment_benefit
join tavolo tra assessment
e benefit
, preferirei avere una chiave esterna assessment_id
nella tabella benefit
, eliminando così la necessità per la tabella join.
Come posso modificare il modello di dominio per ottenere questo risultato?
Qual è la versione Grails utilizzato? Ho utilizzato Grails 2.4.4 e ho utilizzato le classi di dominio fornite da voi, ovvero Valutazione, Benefit, Reddito e IncomeSource. Non ha creato una tabella di join aggiuntiva come hai menzionato. E ha aggiunto 'assessment_id' nelle tabelle benefit, income e income_source. Quindi sarebbe facile verificare se fornisci la versione di Grails da te utilizzata per questo esempio. – Ramsharan
Sto usando Grails 2.5.0 –
Funzionava come mostrato nella risposta? – dmahapatro