Come farlo manualmente
Puoi tradurre la tua query SQL direttamente in jOOQ utilizzando DSL.row()
per costruire un'espressione di valore di riga, quindi:
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")
);
Vedi anche jOOQ sezione manuale relativa a IN
predicato, grado> 1
Utilizza chiavi incorporabili
In alternativa, puoi beneficiare della sicurezza aggiuntiva del tipo offerta dal nuovo jOOQ 3.14 <embeddablePrimaryKeys/>
funzione, che consente di generare tipi di record per tutte le chiavi primarie e le relative chiavi esterne di riferimento. La tua domanda sarebbe quindi:
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();
Questo produce la stessa query di quella originale, ma digita in modo sicuro e non dimenticherai mai più una colonna chiave. Non solo quando interroghi la chiave primaria, ma anche quando ti unisci ad essa! La modifica della chiave comporterà un errore di compilazione:
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();
Oppure un unione implicita sarebbe simile a questo:
ctx.select(OTHER_TEST_TBL.testTbl().fields(), OTHER_TEST_TBL.fields())
.from(OTHER_TEST_TBL)
.fetch();