我正在使用带有临时表的jOOQ:
Table<Record> TMP = DSL.table("tmp");
Field<String> TYPE = DSL.field("type", String.class);
Field<String> TOKEN = DSL.field("token", String.class);
这允许我编写简单的查询:DSL.select(TYPE,TOKEN) . from(TMP)...
但是,当我尝试连接另一个表时,它会产生歧义,因为列名 TYPE
和 TOKEN
没有使用表名限定(即我需要生成的代码看起来像 SELECT tmp.type, tmp.token ...
) . 有没有办法让这种情况发生,或者通过让Jooq了解临时表有某些列,或者使用带有限定名称的 Field
?
当然,对于查询的这些部分,我总是可以使用原始SQL,这是我到目前为止所做的 .
1 回答
在jOOQ中有两种方式与表/列动态交互(即不使用代码生成器):
使用纯SQL(org.jooq.SQL)
那个's what you'正在做 . 显然,您可以通过两种方式直接在纯SQL
Field
引用中限定列:通过在每个字段中重复
"tmp"
字符串:通过在纯SQL模板中嵌入
"tmp"
引用:The plain SQL functionality is documented here in the manual
使用限定引用(org.jooq.Name)
这可能是你想做的事情 . 你会写:
The naming functionality is described here in the manual .
这种方法的优点是:
No SQL injection risk
区分大小写
Table mapping and other AST transformations will work, too