【发布时间】:2019-08-06 20:00:22
【问题描述】:
我必须从“根”表访问同一个表以获取多个引用。为此,我正在为这些表创建别名:
protected final Table<XyzRecord> foo = Tables.XYZ.as("foo", <foo-alias-function>);
protected final Table<XyzRecord> bar = Tables.XYZ.as("bar", <bar-alias-function>);
bar-alias-function 将声明如下_
protected final Function<Field<?>, String> fooFieldAliasFunction = f -> "foo_" + f.getName();
现在,由于我想从类型安全查询中受益,我需要在查询中重复使用相同的 alias-function 来访问字段:
jooq.select()
.from (root)
.leftJoin(foo).on(
checklistTarget.field(fooFieldAliasFunction.apply(Tables.XYZ.ID), Tables.XYZ.ID.getType())
.eq(root.FOO_ID)
)
.leftJoin(bar).on(
checklistTarget.field(barFieldAliasFunction.apply(Tables.XYZ.ID), Tables.XYZ.ID.getType())
.eq(root.BAR_ID)
)
...
;
这看起来非常笨拙(大量代码)并且效率不高(因为别名字段名称可能与别名表一起存储)。
我认为别名上会有一个方法可以直接给我别名字段(例如foo.getField(Tables.XYZ.ID),但情况似乎并非如此。
当然,如果我想选择特定的字段,问题就会被放大......
我错过了什么吗?这样做的推荐方法是什么?
谢谢!
【问题讨论】: