Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在jOOQ中限定临时表列名_Java_Mysql_Sql_Jooq - Fatal编程技术网

Java 在jOOQ中限定临时表列名

Java 在jOOQ中限定临时表列名,java,mysql,sql,jooq,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); Table TMP=DSL.Table(“TMP”); 字段类型=DSL.Field(“TYPE”,String.class); 字段

我将jOOQ与临时表一起使用:

Table<Record> TMP = DSL.table("tmp");
Field<String> TYPE = DSL.field("type", String.class);
Field<String> TOKEN = DSL.field("token", String.class);
Table TMP=DSL.Table(“TMP”);
字段类型=DSL.Field(“TYPE”,String.class);
字段标记=DSL.Field(“标记”,String.class);
这允许我编写简单的查询: DSL.select(类型、令牌).from(TMP)

但是,当我尝试对另一个表进行连接时,它会产生歧义,因为列名
TYPE
TOKEN
没有表名限定(即,我需要生成的代码看起来像
SELECT tmp.TYPE,tmp.TOKEN…
)。有没有办法做到这一点,或者让Jooq了解临时表有某些列,或者用限定名创建一个
字段


当然,对于查询的这些部分,我始终可以使用原始SQL,这就是我目前所做的。

在jOOQ中,有两种方法可以动态地与表/列交互(即不使用代码生成器):

使用普通SQL(
org.jooq.SQL
) 你就是这么做的。显然,您可以通过两种方式直接限定普通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);

使用限定引用(
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);
Table TMP=DSL.Table(DSL.name(“TMP”);
字段类型=DSL.Field(DSL.name(“tmp”,“TYPE”),String.class);
fieldtoken=DSL.Field(DSL.name(“tmp”、“TOKEN”)、String.class);

这种方法的优点是:

  • 注意区分大小写

在jOOQ中,有两种方法可以动态地与表/列交互(即不使用代码生成器):

使用普通SQL(
org.jooq.SQL
) 你就是这么做的。显然,您可以通过两种方式直接限定普通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);

使用限定引用(
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);
Table TMP=DSL.Table(DSL.name(“TMP”);
字段类型=DSL.Field(DSL.name(“tmp”,“TYPE”),String.class);
fieldtoken=DSL.Field(DSL.name(“tmp”、“TOKEN”)、String.class);

这种方法的优点是:

  • 注意区分大小写

太棒了。谢谢你写了这么清晰透彻的答案!令人惊叹的。谢谢你写了这么清晰透彻的答案!