Tro*_*roy 4 java mysql sql jooq
我将 jOOQ 与临时表一起使用:
Table<Record> TMP = DSL.table("tmp");
Field<String> TYPE = DSL.field("type", String.class);
Field<String> TOKEN = DSL.field("token", String.class);
Run Code Online (Sandbox Code Playgroud)
这允许我编写简单的查询:DSL.select(TYPE, TOKEN).from(TMP)...
但是,当我尝试连接另一个表时,它会产生歧义,因为列名TYPE和TOKEN没有用表名限定(即我需要生成的代码看起来像SELECT tmp.type, tmp.token ...)。有没有办法实现这一点,要么让 Jooq 了解临时表具有某些列,要么通过使用Field限定名称来创建 a ?
当然,对于查询的这些部分,我始终可以使用原始 SQL,这就是我到目前为止一直在做的事情。
jOOQ 中有两种动态与表/列交互(即不使用代码生成器)的方法:
org.jooq.SQL)这就是你正在做的事情。Field显然,您可以通过两种方式直接在纯 SQL 引用中限定列:
"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);
Run Code Online (Sandbox Code Playgroud)
通过将引用嵌入"tmp"到纯 SQL 模板中:
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);
Run Code Online (Sandbox Code Playgroud)
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);
Run Code Online (Sandbox Code Playgroud)
这种方法的优点是:
| 归档时间: |
|
| 查看次数: |
3436 次 |
| 最近记录: |