Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在jOOQ中保留别名字段的类型信息_Java_Sql_Jooq - Fatal编程技术网

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

Java 在jOOQ中保留别名字段的类型信息,java,sql,jooq,Java,Sql,Jooq,我正在使用执行一个联接查询,在该查询中,我必须对两个表中的列进行别名,以保持列名的唯一性 有没有一种方法可以避免在对列执行别名时发生的信息丢失?还是一个更好的方法来实现列名称冲突的目标,遵循jOOQ的风格 当我为所有字段设置别名时,所有类型信息都将丢失: List<Field<?>> columns = factory.select().from(t1j).limit(0).fetch().getFields(); List<Field<?>> a

我正在使用执行一个联接查询,在该查询中,我必须对两个表中的列进行别名,以保持列名的唯一性

有没有一种方法可以避免在对列执行别名时发生的信息丢失?还是一个更好的方法来实现列名称冲突的目标,遵循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"

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中最重要的特性