Как мне сопоставить 2 домена с одной и той же таблицей с новой таблицей в Grails? - PullRequest
0 голосов
/ 18 января 2020

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'
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...