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