JOOQ:在逻辑上对来自公共界面中不同表的列进行分组
技术问答
233 人阅读
|
0 人回复
|
2023-09-12
|
我们有一个表设计,其中许多表共享一些列,例如,在某些情况下,我们的一些表有column2 P* t {" s# [4 S
markedForDeletion。在另一种情况下,我们的多个表都有列表approvedAt和approvedBy。这些表不分享任何东西JOINED因此,我不想在这些表中引入公共数据内容JOIN表(这不是性能问题的选择)。
: e/ d$ a" B) [, [" ?# @但从应用程序的角度来看,我确实有一个非常相似的任务要执行。例如,如果我创建了一个新的行,那么在哪个表中插入项目并不重要。我需要从请求中提取批准者和请求时间,以便在我的代码中填写表中的数据。
5 M" ~" m0 Y, [) a在JOOQ我现在可以做类似的事情了6 z0 s6 T& G0 {7 r$ A5 |
private void insertApprovalInformation(Record record,RequestContext ctx) { record.set(DSL.field("approver"),ctx.getRequestUser(); record.set(DSL.field("approvedAt"),ctx.getRequestTime());}但是,我会用这种方法来释放我心爱的所有类型的安全性。理想情况下,我想写一些类似的东西% u% n- ~' x0 W6 [1 B- P3 y
private void insertApprovalInformation(Approvablerecord record,RequestContext ctx) { record.set(ApprovableTable.APPROVER,ctx.getRequestUser(); record.set(ApprovableTable.APPROVED_AT,ctx.getRequestTime());}我知道这类似Postgres继承功能,但我想让这个数据库更加独立,并希望Oracle在数据库中使用它。我想像是配置。JOOQ生成器,然后告诉它,这四个表属于逻辑组,我把它命名为8 P. w! q9 q' d8 C" ], w
approvable而且都有列APPROVER和APPROVED_AT。” 这将使JOOQ例如,为该组实现标记接口。. ]$ t9 F. O9 ?& K- o: U
我认为这可能是一个非常常见的功能,当考虑历史化、批准等常见任务时,将行标记为删除。
& L4 E* j% G6 m. c3 ]1 Z, A8 e我的问题:
$ O5 x* P1 N H9 r% N$ e, I( ]我想在JOOQ有没有办法实现类型安全的结果?# u# j0 s+ V# c3 s, G# x! m: `
关于如何以一种类型安全的方式处理此方案的其他建议?7 p _) H6 H* i2 g2 W# @
还是我应该忘记这里的类型安全?
+ _7 w8 ^0 ]9 a U/ W2 w; ] 解决方案: |
|
|
|
|
|