Cómo hacer esto manualmente
Puede traducir su consulta SQL directamente a jOOQ usando DSL.row()
para construir una expresión de valor de fila y luego:
row(TEST_TBL.ID_PART_1, TEST_TBL.ID_PART_2).in(
row("id_part_1_1", "id_part_2_1"),
row("id_part_1_2", "id_part_2_2")
);
Ver también el jOOQ sección del manual sobre el IN
predicado, grado> 1
Usar claves integrables
Alternativamente, puede beneficiarse de la seguridad de tipo adicional que ofrece el nuevo jOOQ 3.14 <embeddablePrimaryKeys/>
característica, que le permite generar tipos de registro para todas las claves primarias y sus claves externas de referencia. Su consulta sería entonces:
ctx.select()
.from(TEST_TBL)
.where(TEST_TBL.TEST_TBL_PKEY.in(
new TestTblPkeyRecord("id_part_1_1", "id_part_2_1"),
new TestTblPkeyRecord("id_part_1_2", "id_part_2_2")
))
.fetch();
Esto produce la misma consulta que la original, pero escribe de forma segura y nunca más olvidará una columna clave. ¡No solo cuando consulta la clave principal, sino también cuando se une a ella! Cambiar la clave resultará en un error de compilación:
ctx.select()
.from(TEST_TBL)
.join(OTHER_TEST_TBL)
.on(TEST_TBL.TEST_TBL_PKEY.eq(OTHER_TEST_TBL.TEST_TBL_PKEY.TEST_TBL_FKEY))
.fetch();
O una unión implícita se vería así:
ctx.select(OTHER_TEST_TBL.testTbl().fields(), OTHER_TEST_TBL.fields())
.from(OTHER_TEST_TBL)
.fetch();