Как да направите това ръчно
Можете да преведете вашата SQL заявка директно в jOOQ, като използвате DSL.row()
за да конструирате израз за стойност на ред и след това:
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")
);
Вижте също jOOQ ръчен раздел за IN
предикат, степен> 1
Използвайте ключове за вграждане
Като алтернатива можете да се възползвате от допълнителната безопасност на типа, предлагана от новия jOOQ 3.14 <embeddablePrimaryKeys/>
функция, която ви позволява да генерирате типове записи за всички първични ключове и техните препращащи външни ключове. Тогава вашата заявка ще гласи:
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();
Това създава същата заявка като вашата оригинална, но въвежда безопасно и никога повече няма да забравите ключова колона. Не само когато правите заявка към първичния ключ, но и когато се присъединявате към него! Промяната на ключа ще доведе до грешка при компилиране:
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();
Или имплицитно присъединяване ще изглежда така:
ctx.select(OTHER_TEST_TBL.testTbl().fields(), OTHER_TEST_TBL.fields())
.from(OTHER_TEST_TBL)
.fetch();