Hur man gör detta manuellt
Du kan översätta din SQL-fråga direkt till jOOQ med DSL.row()
för att konstruera ett radvärdesuttryck och sedan:
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 även jOOQ manuellt avsnitt om IN
predikat, grad> 1
Använd inbäddningsbara nycklar
Alternativt kan du dra nytta av den extra typsäkerheten som erbjuds av den nya jOOQ 3.14 <embeddablePrimaryKeys/>
funktion, som låter dig generera posttyper för alla primärnycklar och deras refererande främmande nycklar. Din fråga skulle då lyda:
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();
Detta ger samma fråga som din ursprungliga, men skriver säkert, och du kommer aldrig att glömma en nyckelkolumn igen. Inte bara när du frågar efter primärnyckeln, utan också när du går med i den! Att ändra nyckeln kommer att resultera i ett kompileringsfel:
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 koppling skulle se ut så här:
ctx.select(OTHER_TEST_TBL.testTbl().fields(), OTHER_TEST_TBL.fields())
.from(OTHER_TEST_TBL)
.fetch();