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