按用户定义类型过滤时如何在 jooq 中形成 where 子句
How to form where clause in jooq when filtering by user defined type
我将 postgresql (10.2) 与 jooq (3.8.7) 一起使用,假设我有一个类型和一个 table,例如:
CREATE TYPE my_type AS (
id INTEGER,
name TEXT
);
CREATE table my_table (
id INTEGER,
something my_type
);
那么如何使用 jooq 获取 my_table where my_table.something.name = 'test' 的所有记录?我试过这样做:
ctx.selectFrom(MY_TABLE)
.where(MY_TABLE.SOMETHING.NAME.eq("test")) \ SOMETHING is a TableField
... \ and does not have NAME field
但这不起作用(在代码注释中解释)。这就是我想在 jooq 中做的事情:
SELECT * FROM my_table WHERE (something).name = 'test';
jOOQ 3.11 当前未实现通过 DSL 访问用户定义的类型属性。相关的未决功能请求在这里:
https://github.com/jOOQ/jOOQ/issues/228
一如既往,当 运行 处于这种限制时,您可以求助于使用 plain SQL templating:
ctx.selectFrom(MY_TABLE)
.where("{0}.{1} = {2}", MY_TABLE.SOMETHING, MY_TYPE.NAME, DSL.val("test"))
...
当然,如果您经常这样做,您可能希望将这种逻辑包装到您自己的客户端模板中 API 以改进相似模式的重用。
我将 postgresql (10.2) 与 jooq (3.8.7) 一起使用,假设我有一个类型和一个 table,例如:
CREATE TYPE my_type AS (
id INTEGER,
name TEXT
);
CREATE table my_table (
id INTEGER,
something my_type
);
那么如何使用 jooq 获取 my_table where my_table.something.name = 'test' 的所有记录?我试过这样做:
ctx.selectFrom(MY_TABLE)
.where(MY_TABLE.SOMETHING.NAME.eq("test")) \ SOMETHING is a TableField
... \ and does not have NAME field
但这不起作用(在代码注释中解释)。这就是我想在 jooq 中做的事情:
SELECT * FROM my_table WHERE (something).name = 'test';
jOOQ 3.11 当前未实现通过 DSL 访问用户定义的类型属性。相关的未决功能请求在这里: https://github.com/jOOQ/jOOQ/issues/228
一如既往,当 运行 处于这种限制时,您可以求助于使用 plain SQL templating:
ctx.selectFrom(MY_TABLE)
.where("{0}.{1} = {2}", MY_TABLE.SOMETHING, MY_TYPE.NAME, DSL.val("test"))
...
当然,如果您经常这样做,您可能希望将这种逻辑包装到您自己的客户端模板中 API 以改进相似模式的重用。