【问题标题】:How to form where clause in jooq when filtering by user defined type按用户定义类型过滤时如何在jooq中形成where子句
【发布时间】:2019-02-10 16:36:03
【问题描述】:

我将 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 
);

那么如何使用 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

但这不起作用(在代码 cmets 中解释)。这就是我想在jooq中做的事情:

SELECT * FROM my_table WHERE (something).name = 'test';

【问题讨论】:

    标签: java postgresql jooq user-defined-types


    【解决方案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 中,以提高对相似模式的重用。

    【讨论】:

      猜你喜欢
      • 2020-04-03
      • 1970-01-01
      • 2022-01-07
      • 1970-01-01
      • 2019-11-24
      • 1970-01-01
      • 1970-01-01
      • 2019-03-24
      • 1970-01-01
      相关资源
      最近更新 更多