Como fazer isso manualmente
Você pode traduzir sua consulta SQL diretamente para jOOQ usando
DSL.row()
para construir uma expressão de valor de linha e, em seguida: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")
);
Veja também o jOOQ seção do manual sobre o
IN
predicado, grau> 1
Usar teclas incorporáveis
Como alternativa, você pode lucrar com a segurança de tipo adicional oferecida pelo novo jOOQ 3.14
<embeddablePrimaryKeys/>
recurso, que permite gerar tipos de registro para todas as chaves primárias e suas chaves estrangeiras de referência. Sua consulta seria então: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();
Isso produz a mesma consulta que a original, mas digita com segurança e você nunca mais esquecerá uma coluna-chave. Não apenas quando você consulta a chave primária, mas também quando a junta! Alterar a chave resultará em um erro de compilação:
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();
Ou uma junção implícita ficaria assim:
ctx.select(OTHER_TEST_TBL.testTbl().fields(), OTHER_TEST_TBL.fields())
.from(OTHER_TEST_TBL)
.fetch();