Hoe u dit handmatig doet
U kunt uw SQL-query rechtstreeks naar jOOQ vertalen met DSL.row()
om een rijwaarde-expressie te construeren, en dan:
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")
);
Zie ook de jOOQ handleiding over de IN
predikaat, graad> 1
Gebruik insluitbare sleutels
Als alternatief kunt u profiteren van de extra typeveiligheid die wordt geboden door de nieuwe jOOQ 3.14 <embeddablePrimaryKeys/>
functie, waarmee u recordtypen kunt genereren voor alle primaire sleutels en hun verwijzende externe sleutels. Uw vraag zou dan luiden:
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();
Dit levert dezelfde zoekopdracht op als uw oorspronkelijke, maar typt u veilig en vergeet u nooit meer een sleutelkolom. Niet alleen wanneer u de primaire sleutel opvraagt, maar ook wanneer u zich erbij aansluit! Het wijzigen van de sleutel resulteert in een compilatiefout:
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();
Of een impliciete join zou er als volgt uitzien:
ctx.select(OTHER_TEST_TBL.testTbl().fields(), OTHER_TEST_TBL.fields())
.from(OTHER_TEST_TBL)
.fetch();