gpt4 book ai didi

java - 在 jOOQ 中保留别名字段的类型信息

转载 作者:太空宇宙 更新时间:2023-11-04 07:18:31 26 4
gpt4 key购买 nike

我正在使用 jOOQ 进行联接查询,其中我必须为两个表中的列添加别名以保持列名唯一。

有没有办法避免在对列使用别名时发生的信息丢失?或者有更好的方法来实现遵循 jOOQ 风格的列名冲突的目标?

当我为所有字段添加别名时,所有类型信息都会丢失:

List<Field<?>> columns = factory.select().from(t1j).limit(0).fetch().getFields();
List<Field<?>> aliases = new LinkedList<Field<?>>();
for (Field f : columns) {
Field alias = Factory.fieldByName(t1j.getName(), f.getName())
.as(f.getName() + "_t1");
aliases.add(alias);
}

// columns.get(0).getType() == "class java.lang.String"
// aliases.get(0).getType() == "class java.lang.Object"

最佳答案

由于您仅从一个表中进行选择 t1j ,您也许能够导出行类型 <R extends Record>该表中的查询结果。

可以使用各种 DSL.row(...) 显式构造行类型jOOQ 3.0中引入的方法:

Row2<Integer, String> row = DSL.row(INT_FIELD, STRING_FIELD);

然后您可以使用该行类型来表达类型更安全的选择语句:

Result<Record2<Integer, String>> result =
DSL.using(configuration)
.select(row.field1().as("f1"), row.field2().as("f2"))
.from(t1j)
.limit(0)
.fetch();

请注意,您似乎正在使用 jOOQ 2.x,因此行类型尚不可用。

关于java - 在 jOOQ 中保留别名字段的类型信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19638337/

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