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

标签 java sql jooq

我正在使用 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/

相关文章:

java - postgres 中 "timestamp with time zone"类型的 Jooq 绑定(bind)

java - H2:使用嵌套查询的计数查询中的重复列名

java - 条形图 JFreeChart 中的范围

java - 我们如何将字符串转换为在 JAVA 中获取值的工作变量?

SQL 外键引用

php - 如何优化这些查询?

java - 将数据插入具有大量列的表中

java - 使用 Jackson 反序列化时防止 float 到 int 的转换

java - Java的垃圾收集器什么时候回收内存?

MySQL 性能 - 100 万条记录 - 在文本字段前选择 Int