Grails Версия: 3.0.17 | Groovy Версия: 2.4.5 | Версия JVM: 1.8.0_232
Домены DraftPlan и FinalPlan совместно используют одну и ту же таблицу в базе данных и оба расширены из Plan с помощью дискриминатора, называемого PlanTypeID.
class Plan {
static mapping = {
table 'Plan'
id column: 'PlanID'
discriminator column: 'PlanTypeID', type: 'byte'
}
}
class DraftPlan extends Plan {
static mapping = {
discriminator value: PlanType.DRAFT_PLAN
}
}
class FinalPlan extends Plan {
static mapping = {
discriminator value: PlanType.FINAL_PLAN
}
}
class PlanType {
final static Byte DRAFT_PLAN = 1
final static Byte FINAL_PLAN = 2
private PlanType() {}
}
DraftPlan и FinalPlan имеет x количество событий, которые происходят, и каждое событие необходимо отслеживать. После того, как все события для DraftPlan завершены, DraftPlan становится FinalPlan путем изменения PlanTypeID в базе данных. Я хочу создать новую таблицу с именем PlanEvent, которая регистрирует различные события DraftPlan и FinalPlan. Проблема, с которой я работаю, заключается в том, что я не могу иметь 2 домена, ссылающихся на один и тот же столбец идентификатора в сопоставлении stati c для моей новой таблицы. Я пробовал столбцы DraftPlanID и FinalPlanID в моей новой таблице, но я получаю «SQL Grammar Execption», жалуясь, что не знает, как обрабатывать draft_patient_id. Я также пытался использовать одно поле идентификатора с именем «PlanID» для обработки обоих доменов, но Groovy явно выдает ошибку, говоря, что я не могу этого сделать. Есть ли способ создать ссылку для обоих доменов в моей новой таблице или мне нужно создать 2 новые таблицы для ссылки на каждый домен? (DraftPlanEvent & FinalPlanEvent) Таблицы Plan, DraftPlan и FinalPlan являются частью устаревшей базы данных, которую нельзя изменить.
class PlanEvent {
DraftPlan draftPlan
FinalPlan finalPlan
static mapping = {
table 'PlanEvent'
id column: 'PlanEventID'
draftPlan column: 'DraftPlanID'
finalPlan column: 'FinalPlanID'
// Also does not work.
// draftPlan column: 'PlanID'
// finalPlan column: 'PlanID'
}
}