java – 如何在按用户定义的类型过滤时在jooq中形成where子句

我正在使用带有jooq(3.8.7)的
postgresql(10.2),假设我有一个类型和一个表,如:

CREATE TYPE my_type AS (
    id INTEGER,
    name TEXT
);

CREATE table my_table (
    id INTEGER,
    something my_type 
);

然后我如何使用jooq获取my_table的所有记录,其中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';

最佳答案 通过DSL访问用户定义的类型属性目前尚未在jOOQ 3.11中实现.相关的待处理功能请求如下:

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中,以改善重用类似模式.

点赞