Cómo formar cláusula WHERE en jooq al filtrar por tipo definido por el usuario

Damir Ciganović-Jankovic:

Estoy usando PostgreSQL (10.2) con jooq (3.8.7), digamos que tengo un tipo y una tabla como:

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

CREATE table my_table (
    id INTEGER,
    something my_type 
);

Entonces, ¿cómo voy a buscar todos los registros de mi_tabla donde my_table.something.name = 'prueba' mediante el uso de jooq? He intentado hacer algo como esto:

ctx.selectFrom(MY_TABLE)
   .where(MY_TABLE.SOMETHING.NAME.eq("test")) \\ SOMETHING is a TableField 
   ...                                        \\ and does not have NAME field

Pero eso no funciona (se explica en los comentarios de código). Esto es lo que quiero hacer en jooq:

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

Acceso a los atributos de texto definidos por el usuario a través de la DSL no se ha implementado en jOOQ 3.11. La solicitud de función en espera es relevante aquí: https://github.com/jOOQ/jOOQ/issues/228

Como siempre, cuando se ejecuta en una limitación de este tipo, se puede recurrir al uso de plantillas de SQL sin formato :

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

Por supuesto, si usted está haciendo esto más a menudo, es posible que desee para envolver este tipo de lógica en su propia API de plantillas lado del cliente para mejorar la reutilización de patrones similares.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=192057&siteId=1
Recomendado
Clasificación