Java 在jOOQ中保留别名字段的类型信息
我正在使用执行一个联接查询,在该查询中,我必须对两个表中的列进行别名,以保持列名的唯一性 有没有一种方法可以避免在对列执行别名时发生的信息丢失?还是一个更好的方法来实现列名称冲突的目标,遵循jOOQ的风格 当我为所有字段设置别名时,所有类型信息都将丢失:Java 在jOOQ中保留别名字段的类型信息,java,sql,jooq,Java,Sql,Jooq,我正在使用执行一个联接查询,在该查询中,我必须对两个表中的列进行别名,以保持列名的唯一性 有没有一种方法可以避免在对列执行别名时发生的信息丢失?还是一个更好的方法来实现列名称冲突的目标,遵循jOOQ的风格 当我为所有字段设置别名时,所有类型信息都将丢失: List<Field<?>> columns = factory.select().from(t1j).limit(0).fetch().getFields(); List<Field<?>> a
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"
List>alias=new LinkedList由于您仅从一个表t1j
中进行选择,因此您可能能够从该表派生查询结果的行类型
可以使用jOOQ 3.0中引入的各种方法显式构造行类型:
Row2<Integer, String> row = DSL.row(INT_FIELD, STRING_FIELD);
Row2 row=DSL.row(INT\u字段,STRING\u字段);
然后,您可以使用该行类型来表示更安全的select语句:
Result<Record2<Integer, String>> result =
DSL.using(configuration)
.select(row.field1().as("f1"), row.field2().as("f2"))
.from(t1j)
.limit(0)
.fetch();
结果=
DSL.使用(配置)
.选择(第1行().as(“f1”)、第2行().as(“f2”))
.从(t1j)
。限额(0)
.fetch();
请注意,您似乎正在使用jOOQ 2.x,因此行类型尚未提供给您。由于您仅从一个表t1j
中进行选择,因此您可能能够从该表派生查询结果的行类型
可以使用jOOQ 3.0中引入的各种方法显式构造行类型:
Row2<Integer, String> row = DSL.row(INT_FIELD, STRING_FIELD);
Row2 row=DSL.row(INT\u字段,STRING\u字段);
然后,您可以使用该行类型来表示更安全的select语句:
Result<Record2<Integer, String>> result =
DSL.using(configuration)
.select(row.field1().as("f1"), row.field2().as("f2"))
.from(t1j)
.limit(0)
.fetch();
结果=
DSL.使用(配置)
.选择(第1行().as(“f1”)、第2行().as(“f2”))
.从(t1j)
。限额(0)
.fetch();
请注意,您似乎正在使用jOOQ 2.x,因此行类型还不可用。因此答案是:对于jOOQ 2.6,没有答案;但是对于JOOQ3.0,有:)或多或少,是的:-)行级类型安全性是JOOQ3中最重要的特性添加,因此答案是:对于JOOQ2.6,没有答案;但是在JooQ3.0中,有:)或多或少,是的:-)行级类型安全性是JooQ3中最重要的特性