首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >JOOQ:在公共接口中对来自不同表的列进行逻辑分组

JOOQ:在公共接口中对来自不同表的列进行逻辑分组
EN

Stack Overflow用户
提问于 2018-09-27 03:16:17
回答 1查看 229关注 0票数 2

我们有一个表设计,其中许多表共享一些列,例如,在一个例子中,我们的一些表具有列markedForDeletion。在另一种情况下,我们的多个表具有列approvedAtapprovedBy。这些表在要连接的数据方面不共享任何东西,因此,我不喜欢为这些数据介绍一个通用的连接表(由于性能问题,这也不是一个选项)。

但从应用程序的角度来看,我在这里确实有非常相似的任务要执行。例如,如果我创建了一个新行,将条目插入到哪个表中并不重要,我需要从请求中提取批准者和请求时间,以便将其填充到我的表中,以及稍后在代码中的其他行数据。

在JOOQ中,我现在可以这样做

代码语言:javascript
复制
private void insertApprovalInformation(Record record, RequestContext ctx) {
   record.set(DSL.field("approver"), ctx.getRequestUser());
   record.set(DSL.field("approvedAt"), ctx.getRequestTime());
}

然而,我将用这种方法失去我所钟爱的类型安全性。理想情况下,我想写一些类似这样的东西

代码语言:javascript
复制
private void insertApprovalInformation(Approvablerecord record, RequestContext ctx) {
   record.set(ApprovableTable.APPROVER, ctx.getRequestUser());
   record.set(ApprovableTable.APPROVED_AT, ctx.getRequestTime());
}

我知道这类似于Postgres继承特性,但我希望它更独立于数据库,并希望在Oracle数据库中使用它。我设想配置JOOQ生成器,并告诉它“这四个表属于一个逻辑组,我将其命名为‘approvable’,它们都有列APPROVERAPPROVED_AT。”这将让JOOQ生成类,例如为该组实现一个标记接口。

我认为在考虑历史记录、常见任务如审批、标记要删除的行等时,这可能是一个相当常用的功能。

我的问题:

  • 在JOOQ中是否已经有一种方法可以实现我所期望的类型安全结果?
  • 关于如何以类型安全的方式处理这种情况有什么其他建议吗?
  • 或者我应该在这里忘记类型安全?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-28 18:14:19

您可以轻松地配置和扩展jOOQ代码生成器,为您添加类型信息。由于您希望处理生成的记录,因此只需将如下所示的新接口添加到代码库中:

代码语言:javascript
复制
public interface Approvable {
    void setApprover(String approver);
    void setApprovedAt(Timestamp approvedAt);
}

然后配置代码生成器,让所有相关的生成记录使用生成器策略实现上面的接口:

一个可配置的示例:

代码语言:javascript
复制
..
<generator>
  <strategy>
    <matchers>
      <tables>
        <table>
          <expression>MY_TABLE</expression>
          <recordImplements>com.example.Approvable</recordImplements>
        </table>
      </tables>
    </matchers>
  </strategy>
</generator>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52524694

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档