有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我将postgresql(10.2)与jooq(3.8.7)一起使用,假设我有一个类型和一个表,如下所示:

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

CREATE table my_table (
    id INTEGER,
    something my_type 
);

那么如何获取my_tablewhere my_table的所有记录。某物name=“使用jooq进行测试”?我试过这样做:

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';

共 (1) 个答案

  1. # 1 楼答案

    通过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中,以改进对类似模式的重用