【发布时间】:2019-03-02 15:25:47
【问题描述】:
我们有一个表格设计,其中很多表格共享一些列,例如在一种情况下,我们的一些表具有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 中是否已经有一种方法可以实现我想要的类型安全结果?
- 有关如何以类型安全的方式处理此场景的任何其他建议?
- 或者我应该忘记这里的类型安全性?
【问题讨论】: