Sådan gør du dette manuelt
Du kan oversætte din SQL-forespørgsel direkte til jOOQ ved hjælp af DSL.row()
for at konstruere et rækkeværdiudtryk, og derefter:
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")
);
Se også jOOQ manuel sektion om IN
prædikat, grad> 1
Brug indlejrbare nøgler
Alternativt kan du drage fordel af den ekstra typesikkerhed, der tilbydes af den nye jOOQ 3.14 <embeddablePrimaryKeys/>
funktion, som giver dig mulighed for at generere posttyper for alle primærnøgler og deres refererende fremmednøgler. Din forespørgsel ville derefter læse:
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();
Dette producerer den samme forespørgsel som din oprindelige, men skriver sikkert, og du vil aldrig glemme en nøglekolonne igen. Ikke kun når du forespørger på den primære nøgle, men også når du tilslutter dig den! Ændring af nøglen vil resultere i en kompileringsfejl:
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();
Eller en implicit joinforbindelse ville se sådan ud:
ctx.select(OTHER_TEST_TBL.testTbl().fields(), OTHER_TEST_TBL.fields())
.from(OTHER_TEST_TBL)
.fetch();