У нас есть дизайн таблицы, в котором множество таблиц совместно используют несколько столбцов, например, в одном случае некоторые из наших таблиц имеют столбец markedForDeletion
.В другом случае несколько наших таблиц имеют столбцы approvedAt
и approvedBy
.Эти таблицы не имеют ничего общего с точки зрения данных JOINED, и поэтому я не хотел бы представлять общую таблицу JOIN для них (это также не вариант из-за проблем с производительностью).
Но изс точки зрения приложения, у меня есть довольно похожие задачи, которые нужно выполнить здесь.Например, если я создаю новую строку, не имеет значения, в какую из таблиц я вставляю запись, мне нужно извлечь из запроса утверждающего и время запроса, чтобы заполнить его в моей таблице вместе с другой строкой.данные позже в моем коде.
В JOOQ я теперь могу делать что-то вроде
private void insertApprovalInformation(Record record, RequestContext ctx) {
record.set(DSL.field("approver"), ctx.getRequestUser());
record.set(DSL.field("approvedAt"), ctx.getRequestTime());
}
Однако с этим подходом я потеряю всю свою безопасность любимого типа.В идеале я хотел бы написать что-то вроде
private void insertApprovalInformation(Approvablerecord record, RequestContext ctx) {
record.set(ApprovableTable.APPROVER, ctx.getRequestUser());
record.set(ApprovableTable.APPROVED_AT, ctx.getRequestTime());
}
Я знаю, что это похоже на функцию наследования Postgres, но я бы хотел, чтобы это было более независимым от базы данных, и хотел бы использовать его вбаза данных Oracle.Я представляю что-то вроде настройки генератора JOOQ и говорю ему: «Эти четыре таблицы принадлежат логической группе, которую я называю« утвержденной », и у них всех есть столбцы APPROVER
и APPROVED_AT
».что позволит JOOQ генерировать классы, например, реализующие интерфейс маркера для этой группы.
Я думаю, что это может быть довольно часто используемой функцией при рассмотрении истории, общих задач, таких как утверждение, пометка строк для удаления и так далее.
Мои вопросы:
- В JOOQ уже есть способ достичь безопасного по типу результата, как я желаю?
- Любые другие предложения о том, как подойти к этому сценариюбезопасным способом?
- Или я должен просто забыть о безопасности типов здесь?