在 jOOQ 中限定临时 table 列名
Qualifying a temporary table column name in jOOQ
我正在使用 jOOQ 和临时 table:
Table<Record> TMP = DSL.table("tmp");
Field<String> TYPE = DSL.field("type", String.class);
Field<String> TOKEN = DSL.field("token", String.class);
这让我可以编写简单的查询:
DSL.select(类型,代币).from(TMP)...
但是,当我尝试加入另一个 table 时,它会产生歧义,因为列名 TYPE
和 TOKEN
没有使用 table 名称限定(即我需要生成的代码看起来像 SELECT tmp.type, tmp.token ...
)。有没有办法做到这一点,要么让 Jooq 明白临时 table 有特定的列,要么让 Field
有一个合格的名字?
当然,对于查询的这些部分,我总是可以使用原始 SQL,这是我目前所做的。
在 jOOQ 中有两种动态与表/列交互的方法(即不使用代码生成器):
使用普通 SQL (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.
这种方法的优点是:
我正在使用 jOOQ 和临时 table:
Table<Record> TMP = DSL.table("tmp");
Field<String> TYPE = DSL.field("type", String.class);
Field<String> TOKEN = DSL.field("token", String.class);
这让我可以编写简单的查询: DSL.select(类型,代币).from(TMP)...
但是,当我尝试加入另一个 table 时,它会产生歧义,因为列名 TYPE
和 TOKEN
没有使用 table 名称限定(即我需要生成的代码看起来像 SELECT tmp.type, tmp.token ...
)。有没有办法做到这一点,要么让 Jooq 明白临时 table 有特定的列,要么让 Field
有一个合格的名字?
当然,对于查询的这些部分,我总是可以使用原始 SQL,这是我目前所做的。
在 jOOQ 中有两种动态与表/列交互的方法(即不使用代码生成器):
使用普通 SQL (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.
这种方法的优点是: