Comment former clause where dans jooq lors du filtrage en fonction du type défini par l'utilisateur

Damir Ciganovic-Jankovic:

J'utilise, disons que j'ai un type et une table comme postgresql (10.2) avec jooq (3.8.7):

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

CREATE table my_table (
    id INTEGER,
    something my_type 
);

Alors , comment puis-je récupérer toutes les enregistrements de my_table où my_table.something.name = « test » en utilisant jooq? J'ai essayé de faire quelque chose comme ceci:

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

Mais cela ne fonctionne pas (expliqué dans les commentaires de code). Voilà ce que je veux faire dans jooq:

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

Accéder aux attributs de type définis par l'utilisateur par le DSL est actuellement pas mis en œuvre dans jOOQ 3.11. La demande de fonctionnalité en instance pertinente est: https://github.com/jOOQ/jOOQ/issues/228

Comme toujours, lors de l' exécution de limitation d' un tel, vous pouvez recourir à l' aide templating SQL simple :

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

Bien sûr, si vous faites cela plus souvent, vous pourriez vouloir envelopper ce genre de logique dans votre propre API templating côté client pour améliorer la réutilisation des modèles similaires.

Je suppose que tu aimes

Origine http://43.154.161.224:23101/article/api/json?id=192055&siteId=1
conseillé
Classement