gpt4 book ai didi

java - jOOQ:获取别名字段的最佳方法(来自#as(alias,aliasFunction))

转载 作者:太空宇宙 更新时间:2023-11-04 09:47:57 25 4
gpt4 key购买 nike

我必须从“根”表访问同一个表以获取多个引用。为此,我为这些表创建别名:

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) ,但情况似乎并非如此。

当然,如果我想选择特定字段,问题就会放大......

我错过了什么吗?推荐的方法是什么?

谢谢!

最佳答案

I assumed there would be a method on the alias that would give me the aliased field directly (e.g. foo.getField(Tables.XYZ.ID), but that doesn't seem to be the case.

这种 API 确实很有用,尽管现有的 Table.field(Field) 方法不应该经过改造来假设这种行为。可能会引入一种新方法。另一方面,您可以编写一个简单的实用程序:

<T, R extends Record> Field<T> field(Table<R> table, TableField<R, T> field) {
if (table == foo)
return foo.field(fooFieldAliasFunction.apply(field), field.getType());
else if (table == bar)
return foo.field(barFieldAliasFunction.apply(field), field.getType());
else
throw IllegalArgumentException();
}

然后这样调用它:

jooq.select()
.from (root)
.leftJoin(foo).on(field(foo, XYZ.ID).eq(root.FOO_ID))
.leftJoin(bar).on(field(bar, XYZ.ID).eq(root.BAR_ID))
...
;

关于java - jOOQ:获取别名字段的最佳方法(来自#as(alias,aliasFunction)),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55187689/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com