Как сформировать предложение where в jooq при фильтрации по пользовательскому типу - PullRequest
0 голосов
/ 05 сентября 2018

Я использую 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_table , где my_table.something.name = 'test', используя 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 Ответ

0 голосов
/ 06 сентября 2018

Доступ к пользовательским атрибутам типа через DSL в настоящее время не реализован в jOOQ 3.11. Соответствующий ожидающий запрос функции находится здесь: https://github.com/jOOQ/jOOQ/issues/228

Как всегда, при работе с таким ограничением вы можете прибегнуть к использованию простого SQL-шаблона :

ctx.selectFrom(MY_TABLE)
   .where("{0}.{1} = {2}", MY_TABLE.SOMETHING, MY_TYPE.NAME, DSL.val("test"))
   ...

Конечно, если вы делаете это чаще, возможно, вы захотите включить такую ​​логику в свой собственный API шаблонизатора на стороне клиента, чтобы улучшить повторное использование похожих шаблонов.

...