我正在使用带有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中,以改善重用类似模式.