按用户定义类型过滤时如何在 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 以改进相似模式的重用。